将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合法吗? 是的,了解原因