实体框架:从多个表中进行选择

时间:2011-09-14 14:57:32

标签: entity-framework

我有一个声明:

var items = from e in db.Elements
    join a in db.LookUp
    on e.ID equals a.ElementID
    where e.Something == something
    select new Element
    {
        ID = e.ID,
        LookUpID = a.ID
        // some other data get populated here as well
    };

正如您所看到的,我只需要一个Element对象的集合,其中包含来自两个表的数据 - Elements和LookUp。这很好用。但后来我需要知道所选元素的数量:

int count = items.Count();

...此调用抛出System.NotSupportedException:

“无法在LINQ to Entities查询中构造实体或复杂类型'Database.Element'。”

我应该如何从多个表中选择值到实体框架中的一个对象?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您不能在投影中创建实体类,您必须投射到新类或匿名类型

select new 
{
        ID = e.ID,
        LookUpID = a.ID
        // some other data get populated here as well
};

答案 1 :(得分:1)

您的代码根本不起作用。你认为有用的部分从未被执行过。您第一次执行此操作时是您致电Count

异常表示你无法在投影中构造映射实体。可以仅对匿名或非映射类型进行投影。还不清楚为什么你甚至需要这个。如果你的类被正确映射,你应该简单地调用:

var items = from e in db.Elements
            where e.Something == something
            select e;

如果LookupID类是Element类的映射属性,它将被填充。如果它不是映射属性,则无法通过单个查询将其加载到Element