У меня есть этот класс:
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>();
}
Что используется в этом списке:
public List myList = new List ();
Новые элементы добавляются в это как:
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);
Теперь мне нужно сгруппировать его по ItemID и присоединиться к первой записи Routes каждого идентичного ItemID.
Это будет пример public List<ItemList> myList = new List<ItemList>();
данных:
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
Как видите, GUID уникален, ItemID может его повторить самостоятельно.
Каждый GUID имеет список маршрутов, а список всех маршрутов имеет минимум 1 запись и более.
Маршруты являются частью класса ItemList public List<Waypoint> Routes = new List<Waypoint>();
Пример маршрута.
GUID_1_Routes имеет:
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 имеет:
Entry Zone SubID Heading PosX PosY PosZ
1 100 0 10 129.32 437.21 29.10
Итак, что я хочу сделать, это список всех записей, которые у меня есть в myList, сгруппированных по ItemID с сохранением полей ItemID и Name ... и новый список для ItemID, который будет хранить первый элемент каждого маршрута из каждого GUID, который имел тот же ItemID.
Например, ItemID 20 даст следующий результат:
ItemID, Name, ListOfRoutes
Этот ItemID ListOfRoutes будет содержать
GUID_1_Routes первая запись:
Entry Zone SubID Heading PosX PosY PosZ
1 1200 0 100 1029.32 837.21 29.10
GUID_2_Routes первая запись:
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 первые записи.
UPDATE2:
Вот как мне удалось получить желаемые результаты, но я все еще верю, что это было бы возможно с помощью одного запроса или лучше, чем то, что я сейчас использую:
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;
}
}