当前位置:  开发笔记 > 编程语言 > 正文

返回包含2个子类的IQueryable

如何解决《返回包含2个子类的IQueryable》经验,为你挑选了1个好方法。

你可以返回由两个或更多不同的子类组成的IQueryable吗?这是我尝试展示我的意思.它抛出错误:

System.NotSupportedException:Union或Concat中的类型具有以不同顺序分配的成员.

var a = from oi in db.OrderItems
        where oi.OrderID == ID
            && oi.ListingID != null
        select new OrderItemA {
            // etc
        } as OrderItem;

var b = from oi in db.OrderItems
        where oi.OrderID == ID
            && oi.AdID != null
        select new OrderItemB {
            //etc
        } as OrderItem;

return a.Concat(b);

小智.. 5

尝试在IEnumerable而不是IQueryable上执行concat:

return a.AsEnumerable().Concat(b.AsEnumerable());

如果您需要IQueryable结果,您可以这样做:

return a.AsEnumerable().Concat(b.AsEnumerable()).AsQueryable();

这样做强制concat在内存中而不是在SQL中发生,并且任何其他操作也将在内存中发生(LINQ To Objects).

但是,与.ToList()示例不同,执行仍应延迟(使数据延迟加载).



1> 小智..:

尝试在IEnumerable而不是IQueryable上执行concat:

return a.AsEnumerable().Concat(b.AsEnumerable());

如果您需要IQueryable结果,您可以这样做:

return a.AsEnumerable().Concat(b.AsEnumerable()).AsQueryable();

这样做强制concat在内存中而不是在SQL中发生,并且任何其他操作也将在内存中发生(LINQ To Objects).

但是,与.ToList()示例不同,执行仍应延迟(使数据延迟加载).

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有