[英]Linq on a nested List - select all Id's
我有一個嵌套列表,如下所示:
List<Hotel> Hotels;
public class Hotel
{
List<RoomType> RoomType;
}
public class RoomType
{
Room Room;
}
public class Room
{
int RoomId;
}
這有點令人費解,抱歉想不出一個更好的模型模型。 我的想法是,我有很多酒店,每個酒店都有很多房型,並假設每個房型都有一個房間對象。
現在從酒店列表,我只想選擇所有RoomId
..我被RoomId
,同時試圖嵌套所有列表..
現在,我正在嘗試這個:
//cant do this some invalid error
int[] AllRoomIds = Hotels.selectMany(x => x.Rooms)
.selectMany(y => y.RoomType.Room.Id).Distinct().ToArray()
//cant do this - z doesnt have anything
int[] AllRoomIds = Hotels.selectMany(x => x.Rooms)
.selectMany(y => y.RoomType)
.select(z => z.
我該怎么辦?
訪問嵌套列表中所有項目的所有id ..偶爾它會抱怨cannot convert int to boolean
,我不知道這意味着什么......
謝謝..希望這個問題是可以理解的
雖然您在上面發布的層次結構對我來說真的沒有多大意義(似乎RoomType和Room是倒退的),但我會發布一個示例來配合它:
Hotels.SelectMany(h => h.RoomType)
.Select(rt => rt.Room.Id)
.Distinct()
.ToArray();
聽起來你需要選擇RoomType.Room.Id而不是SelectMany。 使用Query語法(我通常更喜歡SelectMany的lambda語法,它會是
var query = (from hotel in Hotels
from type in Hotel.RoomType
select type.Room.Id)
.Distinct.ToArray();
這里有Hotels和Roomtype之間的SelectMany,但不是類型和Room之間的SelectMany。
這是另一種使用GroupBy
(沒有Distinct
)的方法:
int[] allRoomIds = Hotels.SelectMany(h => h.RoomType)
.GroupBy(rt => rt.Room.Id)
.Select(room => room.Room.Id)
.ToArray();
如果您需要對象列表:
List<Room> allRooms = Hotels.SelectMany(h => h.RoomType)
.GroupBy(rt => rt.Room.Id)
.Select(room => room.First())
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.