使用 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
通过对Company
和Item
进行分组来查询它。接下来,您可以使用 .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 选择不同的条目的主要内容,如果未能解决你的问题,请参考以下文章