gpt4 book ai didi

linq - 如何获取与其他列表不同的列表(LINQ)?

转载 作者:行者123 更新时间:2023-12-02 07:38:17 24 4
gpt4 key购买 nike

抱歉这个问题,我无法造句。这是我的,

class Brand{
int ModelId;
string name;
}

class Gallery{

IList<Brand> brands;
...
public BrandList{
get{ return brands; }
}
}

我有一个图库列表。像这样,

IList<Gallery> galleries;

并且画廊中的每个画廊都有很多品牌。例如,图库中有 6 个图库对象。每个画廊都有品牌。像这样,

Gallery1.Brandlist => Audi, Ford 
Gallery2.BrandList => Mercedes,Volvo
Gallery3.BrandList => Subaru
Gallery4.BrandList => Renault
Gallery5.BrandList => Subaru
Gallery6.BrandList =>

我试图通过 LINQ 获得的是一个品牌列表,这些品牌仅与上述所有第一个品牌不同(因此即使福特和沃尔沃在列表中,我也不会选择它们)。画廊不必在他们的列表中有一个品牌。所以它可能是空的,如 Gallery6。输出应该是,

{Audi, Mercedes, Subaru, Renault}

我不知道如何使用 LINQ 执行此操作。我尝试了 SelectMany,但我可以用 LINQ 做的只是简单的 (p=>p.Something = (int) something).ToList()。我不知道该怎么做。

最佳答案

使用 SelectMany Distinct :

<罢工>
IEnumerable<string> allUniqueBrands = allGalleries
.SelectMany(g => g.BrandList.Select(b => b.Name)).Distinct();

在查询语法中:

IEnumerable<string> allBrands = from gallery in allGalleries
from brand in gallery.BrandList
select brand.Name;
IEnumerable<string> allUniqueBrands = allBrands.Distinct();

<罢工>

编辑:现在我明白了,您只需要每个 BrandList 的第一个品牌。

如果要选择Brand你必须提供自定义 IEqualityComparer<Brand>您可以在 Distinct 中使用.如果您需要 List<Brand> , 只需调用 ToList()在最后。

这是一个 IEqualityComparer<Brand>对于 Distinct (或 Union、Intesect、Except 等):

public class BrandComparer : IEqualityComparer<Brand>
{
public bool Equals(Brand x, Brand y)
{
if (x == null || y == null) return false;
return x.Name.Equals(y.Name, StringComparison.OrdinalIgnoreCase);
}

public int GetHashCode(Brand obj)
{
if (obj == null) return int.MinValue;
return obj.Name.GetHashCode();
}
}

这是所有(第一)品牌的独特列表:

List<Brand> uniqueFirstBrands = allGalleries
.Where(g => g.BrandList != null && g.BrandList.Any())
.Select(g => g.BrandList.First())
.Distinct(new BrandComparer())
.ToList();

关于linq - 如何获取与其他列表不同的列表(LINQ)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com