2010-06-04 82 views
3

我正在使用来自.NET 3.5的实体框架实体框架从行中选择单个值

我有两个具有0-1到多个关系的表。让我们说公民和城市。每个公民都有连接他到城市的外键列(ID)。

当我选择单身公民时,我也需要选择他住的城市的名字。 由于城市表包含的数据与公民无关,因此我不想从数据库中检索它以节省一些带宽。

目前我使用的是Include()函数,但它抓取了与市民相关的城市的所有数据,而我只需要名称。

有没有办法编写一个查询来从EF中的整行中选择单个单元格,而不需要创建新的类或接口或存储库? 这里是我的包括:

  Citizen citizen = db.Citizens.Include("Cities").First(p => p.citizen_id == id); 
+0

您的公民模型是否有城市集合? – 2010-06-04 19:17:36

+0

如果公民可以有0个或只有1个城市,为什么还会有一个收藏? – Alex 2010-06-04 19:22:05

回答

2

你可以通过投影,例如,

var c = from c in db.Citizens 
     where c.citizen_id == id 
     select new 
     { 
      Name = c.Name, 
      CityName = c.City.Name 
     }; 

您也可以投影到POCO上。

无法告诉EF检索Citizen类型的对象与相关City但只有City.Name填写。该EF不会兑现部分的实体。只需要几个字段时,使用视图/演示模型或DTO代替实体。

+0

谢谢,这就是我一直在寻找的。 有没有办法从var c立即获取cityName?比方说,我不使用视图模型呢? – Alex 2010-06-04 20:05:28

+0

你的意思是像'var cityName = c.First()。CityName;'? – 2010-06-04 20:49:56