Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.Where子句和条件筛选数组_C#_Filter_Where - Fatal编程技术网

C# 使用.Where子句和条件筛选数组

C# 使用.Where子句和条件筛选数组,c#,filter,where,C#,Filter,Where,我有两个IEnumerable列表,它们有一个名为GetId的方法,该方法返回一个整数 我想比较两个列表。如果UpdatedBoots.getId返回一个与OldBoots相比唯一的Id,我想将其添加到列表中 所以我这样做了: IEnumerable<Boat> newBoats = updatedBoats .Where(c => oldBoats .Any(d => d.GetId() != c.GetId()) .ToList() 旧船和新

我有两个IEnumerable列表,它们有一个名为GetId的方法,该方法返回一个整数

我想比较两个列表。如果UpdatedBoots.getId返回一个与OldBoots相比唯一的Id,我想将其添加到列表中

所以我这样做了:

IEnumerable<Boat> newBoats = updatedBoats
    .Where(c => oldBoats
    .Any(d => d.GetId() != c.GetId())
    .ToList()
旧船和新船的当前ID为[1,2,3,4,5]。我想测试基本情况,但这没有通过。新手总是返回一个所有ID的列表,而它应该不返回任何ID。我对c和d的排序有错吗

这个怎么样

var newBoats = updatedBoats.Where(u => !oldBoats.Any(o => o.GetId() == u.GetId()));
此代码的作用是什么

IEnumerable<Boat> newBoats = updatedBoats.Where(c=> oldBoats.Any(d =>d.GetId() != c.GetId()).ToList()
尽管如此,请注意我的评论。使用哈希集可以更有效地实现这一点:

这大大减少了嵌套迭代的数量,如果您有很多船,尤其是在更新中有很多新船,您将看到不同


HashSet方法适用于ID,但如果您使用ID在Boat类上实现Equals和GetHashcode进行比较,您也可以使其适用于实体本身。

Where不返回bool。你的内部Where可能是Any。@MikeMcCaughan谢谢我更新了问题,但我仍然返回所有整数你的问题没有意义,你说如果newBoats.getId返回唯一的Id,你能正确地解释一下吗?我会尝试使用Select从旧船上获取ID,然后使用更新船上的where来检查ids中没有的内容。请向我们提供GetId的代码,以及运行该代码时更新船上有什么内容。
IEnumerable<Boat> newBoats = updatedBoats.Where(c=> oldBoats.Any(d =>d.GetId() != c.GetId()).ToList()
var newBoats = updatedBoats.Where(u => !oldBoats.Any(o => o.GetId() == u.GetId()));  
// This is O(o * n) for # of old boats * # of updates that are new boats, and something like O((o/2)*n) for # of old boats * number of updated old boats
// This is O(n) for # of updated boats
var newBoatIds = new HashSet<Int32>(updatedBoats.Select(b => b.GetId())); 
// This is O(n) for # of old boats
newBoatIds.ExceptWith(oldBoats.Select(b => b.GetId()));