我有一个声明:
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'。”
我应该如何从多个表中选择值到实体框架中的一个对象?谢谢你的帮助!
答案 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
。