Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Linq结果集强制转换为接口_C#_Linq - Fatal编程技术网

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
(基于);检查它现在是否工作。