C# 查找列表之间的增量<;T>;属性和列表<;T>;

C# 查找列表之间的增量<;T>;属性和列表<;T>;,c#,list,C#,List,我发现很多关于如何使用except比较两个列表的帖子,但我找不到任何解释如何比较两个列表的属性的文章 我有两种型号 FruitBasket { ...... public int[] Fruit {get; set;} } Fruit { public int Id {get; set;} ...... } FruitBasket.Fruit属性有一个与Fruit.Id对应的数字数组。然而,果篮中有孤儿,我需要清除掉 例如,FruitBasket.Fruit将包含1,2

我发现很多关于如何使用except比较两个列表的帖子,但我找不到任何解释如何比较两个列表的属性的文章

我有两种型号

FruitBasket
{
  ......
   public int[] Fruit {get; set;}
}

Fruit
{
   public int Id {get; set;}
   ......
}
FruitBasket.Fruit
属性有一个与
Fruit.Id
对应的数字数组。然而,
果篮中有孤儿,我需要清除掉

例如,
FruitBasket.Fruit
将包含1,2,3,4,5,但只有一个水果1、一个水果2、一个水果3。因此,我需要在
果篮中找到4和5,并更正
果篮

我已经写了一个丑陋的双
ForEach
循环通过
水果篮
水果
试图找到三角洲,我得到了惊人的结果,因为我只是不够聪明,无法弄清楚它

List<int> missing = new List<int>();

foreach (var basket in lstBaskets)
{
   foreach (var frt in lstFruits)
   {
      if (!basket.Fruit.Contains(frt.Id))
      {
        missing.Add(frt.Id);
      }
   }
 }
List missing=新列表();
foreach(风险值篮中的风险值篮)
{
foreach(风险值首次计入当期收益)
{
如果(!basket.Fruit.Contains(frt.Id))
{
缺少。添加(起始Id);
}
}
}
还有一种更优雅的方式来实现这一点吗?当然,这是一种常见的业务需求,并且有一种高效的方式来实现它



请注意,其中一个是列表属性(FruitBaskets.Fruit)与仅是列表的水果进行比较。

由于您有一个集合集合,因此可以使用SelectMany展平嵌套集合:

List<int> missing = lstBaskets
    .SelectMany(s => s.Fruit)
    .Select(s => s)
    .Except(lstFruits.Select(s => s.Id))
    .ToList();
列表缺失=lst
.SelectMany(s=>s.Fruit)
.选择(s=>s)
.Except(lstFruits.Select(s=>s.Id))
.ToList();

列表
吗?
lst
a
List
?您可以使用SelectMany展平集合。使用此选项:
missing=lstrables.SelectMany(s=>s.Fruit.Select(s=>s.Id)).ToList()
所以您只想查找列表差异?我需要更新OP以澄清和标题。我实际上是在比较列表属性和列表。@GPGVM,我回答了。SelectMany可能会有点混乱。不清楚您要做什么。是否要在
basket.Fruit
中标识未知ID值?您显示的代码不会这样做。它标识不在篮子中的水果。因此,如果您有水果{1,2,3},而篮子中包含{1,3,5},那么您显示的循环代码将把
2
添加到
missing
列表中。第一个SelectMany将其展平,但没有可供选择的ID。果篮中的水果是一个int数组。我改成了这个数组,因为我们可以直接使用,除了我得到零个丢失的记录,这是错误的。List missing=lstAlbums.SelectMany(s=>s.images)。除了(lstmimages.Select(s=>s._id)).ToList();哦,酷s=>s是一种表示它的方式@GPGVM,我犯了一个小错误。如果果篮包含一个水果对象数组而不是整数数组,我最初的答案就行了。我删除了
.Id
并更新了我的答案。它现在的工作方式和你期望的一样。我在丢失的集合中得到了零结果,这是不对的。正在检查我的数据。@GPGVM,如果lstrables包含{1,2,3}并且lstFruits包含{3,4,5},是否希望missing包含{1,2}?这就是我根据问题中嵌套的foreach循环给出的答案。您是否希望missing包含{1,2,4,5}?如果是这样,代码将不同。