Ich habe die folgende Abfrage:Vergleichen einer Liste innerhalb Linq Ausdruck
var zoneIds = filter.Zones.Select(s => s.ZoneId);
var playerQuery = this._cmsDbContext.PlayersLoader.Query(user.ClientId);
var sortedLocationIds = playerQuery
.Where(w => zoneIds.Contains(w.ZoneId))
.GroupBy(g => g.LocationId)
.Select(s => s.Key);
Das Problem ist, ich habe wie folgt: Wenn die Liste mit zoneIds mehr als 1 zoneId
enthält, i die Positionen nur zurückkehren möchten Das hat alle Zonen-IDs in der Liste. Ab sofort gebe ich jeden Ort, an dem ich einen Treffer gefunden habe, in der zoneId-Liste zurück.
Also, wenn zoneIds
enthält können sagen zoneId = 1
und zoneId = 5
, ich will nur die Orte, die Spieler mit zoneId
und hat. Jetzt bekomme ich jeden Ort, der entweder die Zone oder hat.
Jede Hilfe wäre sehr willkommen!
* edit,
hier sind die Klassen im, arbeiten mit:
public class Location : IEntityBase
{
public Location()
{
Players = new List<Player>();
Filters = new List<Filter>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int LocationId { get; set; }
public int? ProfileId { get; set; }
[ForeignKey("ProfileId")]
public virtual Profile Profile { get; set; }
public int StoreNumber { get; set; }
[StringLength(50)]
public string LocationName { get; set; }
[StringLength(50)]
public string Street { get; set; }
[StringLength(10)]
public string ZipCode { get; set; }
[StringLength(50)]
public string City { get; set; }
[StringLength(50)]
public string Country { get; set; }
[StringLength(20)]
public string Phone { get; set; }
[StringLength(50)]
public string Email { get; set; }
[StringLength(50)]
public string Homepage { get; set; }
public int LocationActive { get; set; }
public int? ClusterId { get; set; }
[ForeignKey("ClusterId")]
public virtual Cluster Cluster { get; set; }
public int? RegionId { get; set; }
[ForeignKey("RegionId")]
public virtual Region Region { get; set; }
public virtual ICollection<Player> Players { get; set; }
public virtual ICollection<Filter> Filters { get; set; }
public int ClientId { get; set; }
[ForeignKey("ClientId")]
public virtual Client Client { get; set; }
}
public class Player : IEntityBase
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PlayerId { get; set; }
public int LocationId { get; set; }
[ForeignKey("LocationId")]
public virtual Location Location { get; set; }
public int ProfileId { get; set; }
[ForeignKey("ProfileId")]
public virtual Profile Profile { get; set; }
[StringLength(50)]
public string PlayerName { get; set; }
public int ZoneId { get; set; }
[ForeignKey("ZoneId")]
public virtual Zone Zone { get; set; }
public int NrOfScreens { get; set; }
public DateTime ModifiedDate { get; set; }
public DateTime CreatedDate { get; set; }
public int PlayerActive { get; set; }
public int ClientId { get; set; }
[ForeignKey("ClientId")]
public virtual Client Client { get; set; }
public DateTime LastContactDate { get; set; }
[Range(0, 3)]
public int ComputerStatus { get; set; }
[Range(0, 3)]
public int ScreenStatus { get; set; }
[Range(0, 3)]
public int ExtStatus { get; set; }
public DateTime LastServiceDate { get; set; }
}
Können Sie bitte die entsprechenden Entitätsklassen mit den entsprechenden Eigenschaften zur Verfügung stellen? –
Wie bekommen wir alle Zonen eines Spielers? Ihr Beispiel zeigt nur eine einzige Eigenschaft 'ZoneId' an. – Toxantron
Ein Spieler hat nur eine Zone, ein Ort hat mehrere Spieler. – grimsan55