我需要一个linq调用来返回一个数组格式的楼层ID列表,以便我能够使用它来执行Contains调用以返回所有相关数据。
我无法让linq返回一系列楼层。
var myFloors =
(from f in db.Floor
where f.BuildingId == txBuildingId
select new { f.FloorId }).ToArray();
然后,我无法根据该阵列进行选择。
var model =
(from r in db.Room
where myFloors.Contains(r.FloorId)
select new
{
label = r.Name,
value = r.RoomId
});
我可以在SQL中使用字符串并使用IN子句轻松完成此操作。我对LINQ很新,我有很多麻烦。任何帮助将不胜感激。
答案 0 :(得分:3)
此处无需匿名类型,您可以直接选择floorId:
var myFloors =
(from f in db.Floor
where f.BuildingId == txBuildingId
select f.FloorId);
为了更具可读性,我更喜欢使用lambda样式:
var myFloors = db.Floor.Where(f => f.BuildingId == txBuildingId)
.Select(f => f.FloorId);
所以:
var model = db.Room.Where(r => myFloors.Contains(r.FloorId))
.Select(r => new {
label = r.Name,
value = r.RoomId
});
答案 1 :(得分:1)
如果您在Floor
中定义了Room
引用,则可以将2个Linq查询合并为一个,这在性能方面更有效。
db.Room.Where(x=>x.Floor.BuildingId == txBuildingId).Select(r => new {
label = r.Name,
value = r.RoomId
})