使用 LINQ 选择不同的条目

Posted

技术标签:

【中文标题】使用 LINQ 选择不同的条目【英文标题】:Selecting Distinct entries using LINQ [duplicate] 【发布时间】:2022-01-04 15:00:31 【问题描述】:

我在特殊情况下遇到了困难。我们需要返回一个包含所有三列的唯一数据集,以便结果具有唯一的 Company 和 Item 但任何键。

我们正在使用 LINQ,我有一个包含以下列的数据集。

Company     Item    Key
------------------------------------------------------------
CompanyA    ItemA   9f94413b-63cb-4ad5-869a-4502988a22c9
CompanyA    ItemA   6c6a1b37-84a5-4878-a493-5dad5bf60ee4
CompanyB    ItemA   25c5ffca-69a5-45a6-9643-635791dc1bfd

我希望的结果看起来像这样,而不关心我得到哪个键。

Company     Item    Key
CompanyA    ItemA   9f94413b-63cb-4ad5-869a-4502988a22c9
CompanyB    ItemA   25c5ffca-69a5-45a6-9643-635791dc1bfd

我已经尝试了所有 LINQ 示例的组合,但都没有成功。在这种情况下,我首先需要获取公司/项目的不同列表,然后再次循环以获取每个结果的键的 Top(1)?

【问题讨论】:

【参考方案1】:

如果你有这样的事情:

public class MyRecord

    public string Company get;set;
    public string Item get;set;
    public string Key get;set;

然后您可以使用.GroupBy 通过对CompanyItem 进行分组来查询它。接下来,您可以使用 .Select 使用分组的 Company 和 Item 值以及组中的第一个 Key 构建一个新的 MyRecord

List<MyRecord> records = new List<MyRecord>()

    new MyRecord()  Company = "CompanyA", Item = "ItemA", Key = "9f94413b-63cb-4ad5-869a-4502988a22c9" ,
    new MyRecord()  Company = "CompanyA", Item = "ItemA", Key = "6c6a1b37-84a5-4878-a493-5dad5bf60ee4" ,
    new MyRecord()  Company = "CompanyB", Item = "ItemA", Key = "25c5ffca-69a5-45a6-9643-635791dc1bfd" 
;

List<MyRecord> results = records
    .GroupBy(r => new  r.Company, r.Item )
    .Select(g => new MyRecord()  Company = g.Key.Company, Item = g.Key.Item, Key = g.First().Key )
    .ToList();

Try it online

【讨论】:

感谢您回答我的帖子并实际阅读它。有人将该帖子标记为与另一个帖子相关联的重复,该帖子不是相同的问题/解决方案。你的回答很有帮助!

以上是关于使用 LINQ 选择不同的条目的主要内容,如果未能解决你的问题,请参考以下文章

使用linq选择不同的[重复]

Linq:选择不同的对象左连接

LINQ 以 Lambda 形式选择不同计数

使用 LINQ 选择具有不同名称的后代节点

如何从 SQLite 中的表中选择最新的 100 个不同条目?

如何使用 LINQ 选择特定元素名称?