2011-04-01 52 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