gpt4 book ai didi

linq - 如何将 2 个不同的 IQueryable/List/Collection 与相同的基类结合起来? LINQ 联合和协方差问题

转载 作者:行者123 更新时间:2023-12-04 00:55:06 26 4
gpt4 key购买 nike

我正在尝试将(联合或连接)两个列表/集合合二为一。这两个列表有一个共同的基类。例如我试过这个:

        IQueryable<ContractItem> contractItems = myRepository.RetrieveContractItems();
IQueryable<ChangeOrderItem> changeOrderItems = myRepository.RetrieveChangeOrderItems();

IQueryable<ItemBase> folderItems = contractItems.Concat<ItemBase>(changeOrderItems);

但是我收到了 LINQ 错误
DbUnionAllExpression 需要具有兼容集合 ResultTypes 的参数。

有谁知道如何正确地做到这一点?我唯一可以谷歌的是另一个 StackOverflow 问题:
LINQ Union objects with same Base Class

谢谢。

最佳答案

使用 Cast运营商:

IQueryable<ItemBase> folderItems = contractItems
.Cast<ItemBase>()
.Concat(changeOrderItems.Cast<ItemBase>());

另一个问题的答案适用于 LINQ to Objects,但不一定适用于 LINQ to Entities 或 LINQ to SQL。

或者,您可以通过调用 AsEnumerable 转换为 LINQ to Objects。 :
IQueryable<ItemBase> folderItems = contractItems
.AsEnumerable()
.Concat<ItemBase>(changeOrderItems);

但是,请注意 LINQ to Objects; Concat可以在没有任何开销的情况下工作(遍历数据库中的两个集合),但是 Union将完全从数据库中提取一个集合,然后遍历另一个集合。

关于linq - 如何将 2 个不同的 IQueryable/List/Collection 与相同的基类结合起来? LINQ 联合和协方差问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6614989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com