有 2 个数组,第一个数组的类型如下:
public class ListOfUsers
{
public Guid idUser { get; set; }
public string FIO { get; set; }
}
第二个数组的类型是IEnumerable<Guid>。
public ICollection<ListOfUsers> First { get; set; }
public IEnumerable<Guid> Second { get; set; }
public ICollection<ListOfUsers> Result { get; set; }
第一个数组包含用户的唯一 ID 和全名。第二个数组只包含唯一的用户 ID。我如何像这样比较这些数组:
如果数组元素 First 在数组 Second 中,则跳过它。如果不存在,那么将这个元素添加到 Result 数组中,并按最后的 FIO 字段对结果数组进行排序?
我尝试按如下方式进行操作,但所有内容都与第二个数组中的元素一样多次重复:
foreach (var second in Second)
{
foreach (var first in First)
{
if (second != first.idUser)
{
Ressult.Add(new ListOfUsers
{
idUser = first.idUser,
FIO = first.FIO
});
}
}
}
或者,您可以使用
HashSet他的方法ExceptWith或者
Except来自 LINQ 的方法。在这两种情况下,您都需要一个实现
IEqualityComparer. 它可能看起来像这样:进一步的代码可能如下所示:
使用 HashSet 时
使用时除外:
首先,您混淆了迭代的内容和方式(您编写 - 您需要先绕过,但从第二个开始外循环)。
其次,入境检查写错了。
你独立工作:
PS 该主题正在等待地狱般的 linq-one-liners;)