实体框架限制返回的nvarchar列的长度

时间:2011-04-01 03:18:47

标签: entity-framework entity-framework-4 linq-to-entities

我想限制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集合的障碍。

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

1 个答案:

答案 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
             });
相关问题