【问题标题】:Selecting Distinct entries using LINQ [duplicate]使用 LINQ 选择不同的条目
【发布时间】: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)?

【问题讨论】:

    标签: c# linq


    【解决方案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

    【讨论】:

    • 感谢您回答我的帖子并实际阅读它。有人将该帖子标记为与另一个帖子相关联的重复,该帖子不是相同的问题/解决方案。你的回答很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2022-12-17
    相关资源
    最近更新 更多