將linq結果轉換為List

entity-framework linq linq-to-entities

我擴展了我的實體以實現其類型的特定接口。我正在嘗試執行以下查詢:

 var results = from x in context.MyEntityTable
               where x.AProperty == AValue
               select x;

 return results.Count() > 0 ? results.Cast<IApplicationEntity>().ToList() : null;

但是,我不斷收到以下錯誤:

“LINQ to Entities僅支持轉換實體數據模型基元類型”

基本上我想要做的是始終將原始實體類型的結果轉換為它實現的接口的通用列表。

這可能嗎?

一般承認的答案

您可以在客戶端上執行AsEnumerable轉換,通過調用AsEnumerable擴展方法繞過實體框架查詢轉換層:

return results.Any()
       ? results.AsEnumerable().Cast<IApplicationEntity>().ToList() 
       : null;

但是,最好顛倒執行Count檢查的順序:

var list = results.AsEnumerable().Cast<IApplicationEntity>().ToList();
return list.Count == 0 ? null : list;

熱門答案

如果要將結果轉換為複雜類型,則需要強制代碼使用LINQ to Objects而不是LINQ to Entities。

AsEnumerable之前調用AsEnumerable擴展方法就是這裡的訣竅。

請嘗試以下方法:

var results = from x in context.MyEntityTable
              where x.AProperty == AValue
              select x;

return results.AsEnumerable().Cast<IApplicationEntity>().ToList();

還要注意,檢查枚舉上的Count()是不明智的,因為這意味著集合被迭代兩次。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因