2010-08-24 21 views
5

Ich habe die folgenden drei Klassen in meiner dbml Datei:eine Liste von Objekten, indem sie mit einer weiteren Liste von verschiedenen Objekten zu vergleichen

public class Player { 
    public int PlayerID {get; set;} 
    public string Name {get; set;} 
} 

public class PlayerItem { 
    public int PlayerItemID {get; set;} 
    public int PlayerID {get; set;} 
    public int ItemID {get; set;} 
} 

es ein Zusammenhang zwischen Player.ID und PlayerItem.PlayerID

erstellt ist
Public Class CustomItem { 
    public int ItemID {get; set;} 
    public string ItemName {get; set;} 
} 

Hier ist das Setup:

  1. ich eine Liste der Spieler haben - Liste <Player>
  2. Jeder Spieler hat ein EntitySet Kind vom Typ PlayerItem
  3. ich eine Liste der Einzelteile habe - Liste <Item>

Wie kann ich nur die Spieler auswählen, die mindestens ein benutzerdefiniertes Element in ihrer Liste der PlayerItems hat? Dies entspricht grundsätzlich der ItemID in den Player-Elementen jedes Players mit der ID ID in CustomItem.

Letztendlich möchte ich eine einfache Liste von Spielern haben - Liste <Player> - mit zu arbeiten.

Antwort

6

LINQ macht diese Art der Sache einfach:

players.Where(p => p.PlayerItemList.Any( 
       pi => customItems.Any(ci => ci.ItemID == pi.ItemID)); 

Dies kann auch in Frageform geschrieben werden:

var result = from p in players 
      from pi in p.PlayerItemList 
      where customItems.Any(ci => ci.ItemID == pi.ItemID)); 

Dies funktioniert am besten, wenn Sie eine Lookup-Tabelle oder Wörterbuch aus Ihrem benutzerdefinierten erstellen item set:

var customItemDict = customItems.ToDictionary(ci => ci.ItemID); 
var result = from p in players 
      from pi in p.PlayerItemList 
      where customItemDict.ContainsKey(pi.ItemID)); 
+0

Interessant. Ich werde das jetzt versuchen. –

+0

Stellen Sie sicher, dass Sie System.Linq in den von Ihnen verwendeten Namespaces importieren. – LBushkin

+0

Danke, aber ich habe immer noch Probleme. Meine Frage war nicht korrekt formuliert, aber ich habe sie seitdem aktualisiert. Ich habe keine Liste von PlayerItem. Ich habe ein Player-Objekt (in meiner dbml-Datei generiert), das eine Assoziation zu PlayerItem hat. Ich versuche, abzufragen, aber ich kann p.PlayerItems nicht abfragen, da es ein Entityset ist und Fehler in Visual Studiu wirft. –

Verwandte Themen