将linq结果转换为List <MyInterface>

Jam*_*mes 8 linq linq-to-entities entity-framework

我扩展了我的实体以实现其类型的特定接口.我正在尝试执行以下查询:

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

 return results.Count() > 0 ? results.Cast<IApplicationEntity>().ToList() : null;
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到以下错误:

"LINQ to Entities仅支持转换实体数据模型基元类型"

基本上我想要做的是始终将原始实体类型的结果转换为它实现的接口的通用列表.

这可能吗?

Meh*_*ari 20

您可以在客户端上执行强制转换,通过调用AsEnumerable扩展方法绕过实体框架查询转换层:

return results.Any()
       ? results.AsEnumerable().Cast<IApplicationEntity>().ToList() 
       : null;
Run Code Online (Sandbox Code Playgroud)

但是,最好颠倒执行Count检查的顺序:

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

  • +1,但是这将执行两个数据库查询(对于 Count 和 ToList)...最好先调用 ToList,然后检查项目数 (2认同)