C# 将Linq结果集强制转换为接口
我有以下疑问:C# 将Linq结果集强制转换为接口,c#,linq,C#,Linq,我有以下疑问: var result = context.BEntries .Where(x => x.a == "a") .Select(x => new MyClass() { a = x.a }).ToList(); 我得到类型为List的结果。但是,我必须返回IEnumerable。如何将其转换为通用定义?您不需要这样做 IEnumerable是协变的列表可隐式转换为IEnumerable .NET3.5不使用协方差,因此您
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass()
{
a = x.a
}).ToList();
我得到类型为List
的结果。但是,我必须返回IEnumerable
。如何将其转换为通用定义?您不需要这样做
IEnumerable
是协变的<代码>列表可隐式转换为IEnumerable
.NET3.5不使用协方差,因此您需要自己使用它
您可以调用
.Cast()
或将select
表达式强制转换为IMyClass
,以便查询首先返回IMyClass
。只要MyClass实现IMyClass,这应该就可以了。如果您使用的是不支持,您可以使用Cast
:
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass() { a = x.a })
.AsEnumerable()
.Cast<IMyClass>();
var result=context.BEntries
.其中(x=>x.a==“a”)
.Select(x=>newmyclass(){a=x.a})
.可计算的()
.Cast();
不要使用var
,简单地定义界面的列表或IEnumerable
,这假设是C#4或更高版本,不是吗?这是一个C#3.5项目。我在另一个答案中也写了这个:看起来像,但我得到了这个错误:{“无法将类型“MyClass”强制转换为类型“IMyClass”。LINQ to Entities仅支持强制转换实体数据模型基元类型。“}
该类的内容基本上都是基本类型,有些是可以为null的。如果您正在编写EF查询,则需要通过调用AsEnumerable()在客户端上运行该查询。”
首先。这看起来很像,但我得到了一个错误:{“无法将类型“MyClass”转换为类型“IMyClass”。LINQ to Entities只支持转换实体数据模型基元类型。}
该类的内容几乎都是基本类型,有些是可以为空的。@elite5472:我添加了一个AsEnumerable
(基于);检查它现在是否工作。