返回包含2个子类的IQueryable

Chr*_*ter 4 c# linq-to-sql

你可以返回由两个或更多不同的子类组成的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<OrderItem>(b);
Run Code Online (Sandbox Code Playgroud)

小智 5

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

return a.AsEnumerable().Concat(b.AsEnumerable());
Run Code Online (Sandbox Code Playgroud)

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

return a.AsEnumerable().Concat(b.AsEnumerable()).AsQueryable();
Run Code Online (Sandbox Code Playgroud)

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

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