如何合并两个IQueryable列表

时间:2010-10-23 11:50:03

标签: c# iqueryable

我想在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可以有记录。我该如何合并?

3 个答案:

答案 0 :(得分:73)

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

var list3 = list1.Concat(list2);

var list4 = list1.Union(list2);

Union是一个设置操作 - 它返回不同的值。

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

您可以将Union视为Concat,然后是Distinct

答案 1 :(得分:2)

即使

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());

答案 2 :(得分:-2)

我找到的另一个选择:
声明:
    IEnumerable<int> 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(作为distinct)包含所有用户的ID为IEnumerable -int -