我有以下查询:
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass()
{
a = x.a
}).ToList();
我得到List<MyClass>
类型的结果。但是,我必须返回IEnumerable<IMyclass>
。如何将其转换为通用定义?
答案 0 :(得分:7)
你不需要。
IEnumerable<T>
是协变的; List<MyClass>
可隐式转换为IEnumerable<IMyClass>
。
.Net 3.5不使用协方差,因此您需要自己投射。
您可以致电.Cast<IMyClass>()
或将select
表达式转换为IMyClass
,以便查询首先返回IMyClass
。
答案 1 :(得分:2)
如果您使用的旧版C#不支持covariance,则可以使用Cast
:
var result = context.BEntries
.Where(x => x.a == "a")
.Select(x => new MyClass() { a = x.a })
.AsEnumerable()
.Cast<IMyClass>();
答案 2 :(得分:0)
只要MyClass实现IMyClass,就应该没问题。
答案 3 :(得分:0)
请勿使用var
,只需定义界面的List
或IEnumerable