Ich habe diese Klasse:Container mit Linq + Gruppe abfragen?
public class ItemList
{
public int GuID { get; set; }
public int ItemID { get; set; }
public string Name { get; set; }
public entityType Status { get; set; }
public int Zone { get; set; }
public class Waypoint
{
public int SubID { get; set; }
public int Heading { get; set; }
public float PosX { get; set; }
public float PosY { get; set; }
public float PosZ { get; set; }
}
public List<Waypoint> Routes = new List<Waypoint>();
}
, die auf dieser Liste verwendet wird: public List myList = new List();
Neue Elemente hinzugefügt werden ist wie folgt:
ItemList newItem = new ItemList();
newItem.GUID = GUID;
newItem.ItemID = ItemID;
newItem.Name = Name;
newItem.Status = Status;
// Inner Routes List
ItemList.Waypoint itemLocation = new ItemList.Waypoint();
itemLocation.SubID = SubID;
itemLocation.Zone = Zone;
itemLocation.Heading = convertHeading(Heading);
itemLocation.PosX = PosX;
itemLocation.PosY = PosY;
itemLocation.PosZ = PosZ;
itemLocation.Rest = Rest;
newItem.Routes.Add(itemLocation);
myList.Add(newItem);
Jetzt muss ich zu einer Gruppe durch ItemID und kommen Sie den ersten Eintrag von Routen jedes iqual ItemID.
Dies wäre ein Beispiel für public List<ItemList> myList = new List<ItemList>();
Daten sein:
GUID ItemID ListOfRoutes
1 20 GUID_1_Routes
2 20 GUID_2_Routes
3 20 GUID_3_Routes
4 20 GUID_4_Routes
5 20 GUID_5_Routes
6 55 GUID_6_Routes
7 55 GUID_7_Routes
8 55 GUID_8_Routes
9 1 GUID_9_Routes
10 1 GUID_10_Routes
Wie Sie GUID ist einzigartig sehen kann, ist es ItemID kann selbst reapeat. Jede GUID hat eine Routenliste und alle Routenlisten haben mindestens 1 Eintrag und mehr.
Routen ist Teil der Klasse public List<Waypoint> Routes = new List<Waypoint>();
ItemList Beispiel
Routen.
GUID_1_Routes haben:
Entry Zone SubID Heading PosX PosY PosZ
1 1200 0 100 1029.32 837.21 29.10
2 1200 0 120 1129.32 537.21 29.10
3 1200 0 180 1229.32 137.21 29.10
4 1200 0 360 1329.32 437.21 29.10
5 1200 0 100 1429.32 637.21 29.10
GUID_2_Routes haben:
Entry Zone SubID Heading PosX PosY PosZ
1 100 0 10 129.32 437.21 29.10
Also, was soll ich eine Liste aller Einträge tun ist, ich auf myList von ItemID maintainning die Felder ItemID und Namen gruppiert haben ... und eine neue Liste pro ItemID, die das erste Element jedes Routes von jeder GUID mit derselben ItemID speichert.
Zum Beispiel ItemID 20 würde die Folge Ergebnis führt:
ItemID, Name ListOfRoutes
Diese ItemID ListOfRoutes
GUID_1_Routes ersten Eintrag enthalten würde:
Entry Zone SubID Heading PosX PosY PosZ
1 1200 0 100 1029.32 837.21 29.10
GUID_2_Routes ersten Eintrag :
Entry Zone SubID Heading PosX PosY PosZ
1 100 0 10 129.32 437.21 29.10
GUID_3_Routes, GUID_4_Routes, GUID_5_Routes erste Einträge.
UPDATE2:
Dies ist, wie ich die Ergebnisse zu erhalten, haben es geschafft, ich wollte, aber ich glaube es immer noch dann mit einer einzigen Abfrage oder in einer besseren Art und Weise möglich wäre, was ich zur Zeit bin mit:
var query = from ItemList item in myList
where status.Contains(item.Status)
group item by new
{
item.ItemID,
item.Name,
item.Zone
}
into newList
orderby newList.Key.ItemID ascending
select new
{
newList.Key.ItemID,
newList.Key.Name,
newList.Key.Zone
};
foreach (var thisItem in query)
{
var location = from n in myList
where n.ItemID == thisItem.ItemID
select new
{
Routes = n.Routes.First()
};
foreach (var thisObject in location)
{
ItemList.Waypoint thisRoutes = thisObject.Routes;
}
}
Zuerst ein frohes neues Jahr und danke für die Antwort Ich werde es versuchen, mehr jedes Element in der öffentlichen Liste zu erklären myList = neue Liste (); ', die die Klasse innerhalb der Liste der Routen' öffentliche Liste hat Routen = neue Liste (); 'aber einige Elemente haben mehr als 1 Route und ich brauche genau den ersten Eintrag jedes Elements. –
Prix
@Prim: Klingt für mich wie die erste Abfrage, was Sie dann suchen. –
@Jeff M unglücklich Ich bin nicht in der Lage, das oben zu Pratice in die aktuelle Klasse, die ich habe und die daraus resultierende Abfrage brauche ich auch die – Prix