2011-04-01 53 views
0

的实体框架极限长度我想限制在EF查询中的列的长度,鼻翼:返回的nvarchar列

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不能投影复杂类型订单查询失败。

实体或复杂类型'Model.ContactEvent'不能在LINQ to Entities查询中构造。

我已经尝试了几种不同的方式做同样的事情,例如使用显式连接在LINQ的表达,但到目前为止,我总是碰钉子填充订单集合中选择投影。

关于如何构建我的查询的任何想法?理想情况下,我甚至不想使用选择投影,但我假设我需要为了能够限制从数据库返回的描述列的长度。

回答

1

您无法投影到实体类型。这是限制。如果你想返回投影(调用select new),你必须返回匿名类型或自定义非实体类型。如果你想返回实体类型,你必须总是从linq-to-entities返回整个列。你可以尝试使用以下对象物化后修剪列:

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 
      }); 
+0

我想我必须采取从数据库中拉出额外字节的命中然后:(。 – sipwiz 2011-04-01 11:34:40