我找到了很多关于如何比较两个列表使用除了但我找不到任何解释如何比较两个列表的属性。查找列表<T>属性和列表之间的三角洲<T><T>
我有两个模型
FruitBasket
{
......
public int[] Fruit {get; set;}
}
Fruit
{
public int Id {get; set;}
......
}
的FruitBasket.Fruit
属性具有数字的数组对应于Fruit.Id
。但是,我需要清除FruitBaskets
中的孤儿。
例如FruitBasket.Fruit
将包含1,2,3,4,5,但只会有一个水果1个,水果2,水果3.所以,我需要找到在4,5和纠正。
我写了一个丑陋的双ForEach
循环通过FruitBaskets
和Fruit
试图找到三角洲和我越来越离谱的结果,因为我只是没有足够的智慧来弄明白。
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);
}
}
}
此外,作为一个更优雅的方式来实现这一目标吗?这肯定是一种常见的商业需求,并且有一种高效的方式来实现它?
注
注意,一个是列表属性(FruitBaskets.Fruit)正在相比,水果这仅仅是一个列表。
是'lstBaskets'一个'名单'? 'lstFruits'是'列表'?您可以使用SelectMany来压扁集合。使用这个:'missing = lstBaskets.SelectMany(s => s.Fruit).Select(s => s.Id).Except(lstFruits.select(s => s.Id))。ToList()' –
user2023861
所以你只是想找到列表差异? – Jacobr365
我需要更新OP来澄清和标题。我实际上将名单财产与名单比较。 –
GPGVM