如何合并两个 IQueryable 列表

发布于 2024-09-28 10:28:24 字数 424 浏览 4 评论 0原文

我想在 C# 中合并两个 IQueryable 列表的记录。我尝试

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Concat(obj1);

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Union(obj1);

如果 list1 为空,则结果列表也为空。就我而言,list1 可以为空,但 list2 可以有记录。我应该如何合并它们?

I want to merge the records of two IQueryable lists in C#. I try

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Concat(obj1);

and

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Union(obj1);

but if list1 is empty then the resultant list is also empty. In my case either list1 can be empty but list2 can have records. How should i merge them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风月客 2024-10-05 10:28:24

您没有使用返回值 - 就像所有其他 LINQ 运算符一样,该方法不会更改现有序列 - 它返回序列。所以试试这个:

var list3 = list1.Concat(list2);

or

var list4 = list1.Union(list2);

Union 是一个集合操作 - 它返回不同的值。

Concat 只是返回第一个序列中的项目,然后返回第二个序列中的项目;生成的序列可能包含重复的项目。

您可以将 Union 视为 Concat 后跟 Distinct

You're not using the return value - just like all other LINQ operators, the method doesn't change the existing sequence - it returns a new sequence. So try this:

var list3 = list1.Concat(list2);

or

var list4 = list1.Union(list2);

Union is a set operation - it returns distinct values.

Concat simply returns the items from the first sequence followed by the items from the second sequence; the resulting sequence can include duplicate items.

You can think of Union as Concat followed by Distinct.

陌伤ぢ 2024-10-05 10:28:24

var result = Enumerable.Concat(list1, list2);

还不行吗

并确保列表为空,而不是空:

var result = Enumerable.Concat(
    list1 ?? Enumerable.Empty<MediaType>()
    list2 ?? Enumerable.Empty<MediaType>());

还可以尝试:

var result = Enumerable.Concat(
    list1.AsEnumerable(),
    list2.AsEnumerable());

Even

var result = Enumerable.Concat(list1, list2);

doesn't work?

And be sure that lists are empty, not null:

var result = Enumerable.Concat(
    list1 ?? Enumerable.Empty<MediaType>()
    list2 ?? Enumerable.Empty<MediaType>());

Also try:

var result = Enumerable.Concat(
    list1.AsEnumerable(),
    list2.AsEnumerable());
折戟 2024-10-05 10:28:24

我发现的另一个选择:
声明:
IEnumerable; usersIds = new int[0];
例如在循环内:

foreach (var id in Ids) {
            IQueryable<int> _usersIds = bl.GetUsers(id).Select(x => x.UserID);
            usersIds = usersIds.Concat(_usersIds);
        }  
var ids = usersIds.Distinct();

现在 usersIds 和 ids(不同)包含所有用户的 id 作为 IEnumerable -int-

Another option I found:
Declare:
IEnumerable<int> usersIds = new int[0];
For example inside a loop:

foreach (var id in Ids) {
            IQueryable<int> _usersIds = bl.GetUsers(id).Select(x => x.UserID);
            usersIds = usersIds.Concat(_usersIds);
        }  
var ids = usersIds.Distinct();

Now usersIds and ids(as distinct) contains the id of all users as IEnumerable -int-

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文