将LINQ结果设置为接口



我有以下查询:

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,简单定义接口的 ListIEnumerable

最新更新