2014-01-13 81 views
1

我有查询包含对象(ex门)的对象列表(ex房间) 门有许多属性(如宽度,高度,颜色),但我只需要颜色。选择属性实体ef linq

现在我有

Rooms.include(r => r.Door) 

但这需要门的所有属性。 如果我做

Rooms.include(r => r.Door.color) 

比它说,颜色是不是门的航行性能。

我该如何选择颜色?

我希望我明确自己。任何帮助表示赞赏

+0

你想装入房间,或只是门颜色列表没有任何有关房间的信息? –

+0

我也需要房间 –

回答

1

包含不用于选择,它用于告诉编译器该属性应该包含在查询中。只需使用选择来获取颜色并包括选择中的房间。

编辑:答案是在提供附加信息后编辑的。

Rooms.Select(r => new {Color = r.Door.color, Room = r) ; 
+1

这将只选择门颜色,而不是房间 –

+0

如在谢尔盖的评论中所述,这只是选择颜色,所以返回类型不匹配房间列表 –

+0

@SergeyBerezovskiy是的,我回答之前的额外提供了信息。 –

1

不幸的是,您不能有条件地加载相关实体的属性 - 您要么加载整个门实体,要么不加载该实体。但你可以使用匿名类型来返回它的房间和门的颜色:

var rooms = from r in db.Rooms 
      select new { 
       Room = r, 
       DoorColor = r.Door.Color 
      }; 
+0

不只是匿名。如果实体具有公共属性,则可以使用Select语句和集合初始值设定项将其转换为另一个Door对象。 – Flater

+1

gues我需要返回具有不同属性的自定义视图列表,而不是聚合空间。 thx帮助 –

+0

@Flater能否详细说明您提到的收集初始值设定项? –