Ray*_*ond 12 linq union covariance
我试图将两个列表/集合合并(联合或concat).这两个列表有一个共同的基类.我试过这个:
IQueryable<ContractItem> contractItems = myRepository.RetrieveContractItems();
IQueryable<ChangeOrderItem> changeOrderItems = myRepository.RetrieveChangeOrderItems();
IQueryable<ItemBase> folderItems = contractItems.Concat<ItemBase>(changeOrderItems);
Run Code Online (Sandbox Code Playgroud)
但是我得到LINQ错误DbUnionAllExpression需要带有兼容集合ResultTypes的参数.
有谁知道如何正确地做到这一点?我唯一可以google的是另一个StackOverflow问题: 具有相同基类的LINQ Union对象
谢谢.
Ste*_*ary 15
使用Cast运营商:
IQueryable<ItemBase> folderItems = contractItems
.Cast<ItemBase>()
.Concat(changeOrderItems.Cast<ItemBase>());
Run Code Online (Sandbox Code Playgroud)
另一个问题的答案适用于LINQ to Objects,但不一定适用于LINQ to Entities或LINQ to SQL.
或者,您可以通过调用AsEnumerable以下命令将LINQ转换为对象:
IQueryable<ItemBase> folderItems = contractItems
.AsEnumerable()
.Concat<ItemBase>(changeOrderItems);
Run Code Online (Sandbox Code Playgroud)
但是,请注意LINQ to Objects; Concat可以在没有任何开销的情况下工作(从数据库中迭代两个集合),但是Union会完全从数据库中提取其中一个集合,然后遍历另一个集合.
| 归档时间: |
|
| 查看次数: |
4709 次 |
| 最近记录: |