将Linq结果集转换为接口

时间:2014-01-28 18:26:07

标签: c# linq

我有以下查询:

var result = context.BEntries
    .Where(x => x.a == "a")
    .Select(x => new MyClass()
    {
        a = x.a
    }).ToList();

我得到List<MyClass>类型的结果。但是,我必须返回IEnumerable<IMyclass>。如何将其转换为通用定义?

4 个答案:

答案 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,只需定义界面的ListIEnumerable