创建一个数组,然后根据它进行选择

时间:2013-08-22 02:54:40

标签: c# asp.net-mvc linq

我需要一个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很新,我有很多麻烦。任何帮助将不胜感激。

2 个答案:

答案 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
})
相关问题