簡體   English   中英

Linq Groupby返回原始對象

[英]Linq Groupby return original object

我需要一些幫助來過濾一些數據。 我有一個具有三個屬性的對象類。 我得到的對象集合可以與第一個屬性Point3d進行許多匹配。 從該匹配集合中,我需要查看第二個屬性是否具有唯一值Tag。 最后,我需要能夠識別Point3d匹配的對象,並且標簽是不同的,使用第三個屬性,它是Id(它始終是唯一的)。

class pmatch
{
    public string Point3d { get; set; }
    public string Tag { get; set; }
    public string Id { get; set; }
}

我正在尋找的一個例子是:

List<pmatch> dataset = new List<pmatch>
{
    new pmatch { Point3d = "1, 1, 1", Tag = "5", Id = "123" },
    new pmatch { Point3d = "1, 1, 1", Tag = "6", Id = "124" },
    new pmatch { Point3d = "1, 1, 2", Tag = "7", Id = "125" },
    new pmatch { Point3d = "1, 1, 2", Tag = "7", Id = "126" }
};

我需要能夠識別Id的123和124,因為他們的Point3ds匹配,但他們的標簽沒有。 我已經能夠使用LINQ識別這些實例:

var result = datalist.GroupBy(item => item.Point3d, item => item.Tag);
foreach (var group in result)
{
    Console.WriteLine(group.Key);
    var uniqueTags = group.Distinct().ToList();
    if (uniqueTags.Count > 1)
    {
        Console.WriteLine("Found mismatched tags");
        foreach (string Tag in group)
        {
            Console.WriteLine("  {0}", Tag);
        }
    }
}

但是這些結果並沒有給我Id,所以我無法訪問我發現的對象。 如何將這些結果與Id或pmatch對象本身一起獲得?

您可以像這樣完成所需的結果:

var resultSet = 
       dataset.GroupBy(item => item.Point3d)
              .Where(group => group.Select(item => item.Tag)
                                   .Distinct()
                                   .Count() > 1)
              .ToDictionary(item => item.Key, item => item.ToList());

這將標識Id的123124 ,因為它們的Point3ds匹配,但它們的標簽不匹配,而且resultSet的類型為Dictionary<string, List<pmatch>>因此您可以訪問pmatch對象的所有屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM