我有以下查询:
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass()
{
a = x.a
}).ToList();
我得到了List<MyClass>
类型的结果。但是,我必须返回IEnumerable<IMyclass>
。我如何将其施加到其通用定义?
您不需要。
IEnumerable<T>
是协变的;List<MyClass>
隐式转换为IEnumerable<IMyClass>
。
.NET 3.5不使用协方差,因此您需要自己施放。
您可以致电.Cast<IMyClass>()
或将select
表达式施加到IMyClass
,以便查询首先返回IMyClass
。
如果您使用的是不支持协方差的C#的旧版本,则可以使用Cast
:
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass() { a = x.a })
.AsEnumerable()
.Cast<IMyClass>();
只要myClass实现ImyClass,这应该是可以的。
不使用 var
,简单定义接口的 List
或 IEnumerable