linq - 将 linq 结果转换为 List<MyInterface>

标签 linq entity-framework linq-to-entities

我已经扩展了我的实体以实现其类型的特定接口(interface)。我正在尝试执行以下查询:

 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 仅支持转换实体数据模型原始类型”

基本上我想做的总是将结果从原始实体类型转换为它实现的接口(interface)的通用列表。

这可能吗?

最佳答案

您可以在客户端进行转换,通过调用 AsEnumerable 绕过 Entity Framework 查询翻译层扩展方法:

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

但是,最好颠倒执行 Count 的顺序。查看:
var list = results.AsEnumerable().Cast<IApplicationEntity>().ToList();
return list.Count == 0 ? null : list;

关于linq - 将 linq 结果转换为 List<MyInterface>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361085/

相关文章:

c# - LINQ to XML (C#) 遍历节点以构建字符串?

asp.net-mvc - 如何将此 IQueryable<Patient> 转换为 DbSet<Patient> ?

c# - 无法转换类型为 '<>f__AnonymousType1` 的对象 2 [System.Int64、System.String ]' to type ' ConsoleApplication1.Profile'。

c# - 如何选择与对象列表中的属性值共享属性值的所有对象?

c# - 如何使用 Linq2Sql C# 表达式使用复杂表达式进行连接

c# - 使用 LINQ 查询文本文件

c# - Orderby 不工作

asp.net-mvc - 使用 EF 6 和 MVC 5 中的代码优先方法将新表添加到现有数据库

entity-framework - 使用 Entity Framework 4将N​​otes表与多个实体表相关

c# - LinqKit 与 'Method cannot be translated into a store expression' 异常