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