我想限制EF查询中列的长度,ala:
var query = from ce in entities.ContactEvents
.Include("Person")
.Include("Orders")
where ce.PersonID = personID
orderby ce.DateTimeContact descending
select new ContactEvent
{
ID = ce.ID,
DateTimeContact = ce.DateTimeContact,
Description = ce.Description.Substring(0, 500),
Orders = ce.Orders
};
查询失败,因为EF无法投影复杂类型订单。
无法在LINQ to Entities查询中构造实体或复杂类型“Model.ContactEvent”。
我尝试了几种不同的方法来做同样的事情,比如在LINQ表达式中使用显式连接,但到目前为止,我总是在选择投影中点击填充Orders集合的障碍。
关于如何构建查询的任何想法?理想情况下,我甚至不想使用选择投影,但我假设我需要为了能够限制从数据库返回的描述列的长度。
答案 0 :(得分:1)
您无法投影到实体类型。这是限制。如果要返回投影(调用select new
),则必须返回匿名类型或自定义非实体类型。如果要返回实体类型,则必须始终从linq-to entity返回整列。您可以尝试使用以下方法在实现对象后修剪列:
var data = (from ce in entities.ContactEvents
.Include("Person")
.Include("Orders")
where ce.PersonID = personID
orderby ce.DateTimeContact descending
select ce)
.AsEnumerable()
.Select(e => new ContactEvent
{
ID = e.ID,
DateTimeContact = e.DateTimeContact,
Description = e.Description.Substring(0, 500),
Orders = e.Orders
});