簡體   English   中英

在LINQ中按數組中的屬性分組

[英]Group by in LINQ on a property in an array

我有一個數組,我想根據屬性對項目進行分組。 我嘗試了以下代碼,但未正確分組。 MyArray是數組, Id是要對其進行分組的屬性。

var docGroup = (from x in MyArray
                group x by x.Id).Select(grp => new
                                       {
                                           Id = grp.Key,
                                           Results = grp.ToList(),
                                       })
                                .Results
                                .ToList());

為了簡單起見

var docGroup = from x in MyArray  group x by x.Id;

其中,id是數組中的字符串“ 123”,而MyArray [2]具有相同的ID。 當我檢查docGroup時,它具有兩個條目,並且都具有123鍵,而不是只有一個具有123鍵的條目。

這是一個非常簡單的示例:

class Program
{
    static void Main(string[] args)
    {
        Test[] tArray = new Test[3];
        Test t = new Test() { Id = "123", Val="First" };

        Test t1 = new Test() { Id = "123", Val="Second" };
        Test t2 = new Test() { Id = "1234", Val="Third" };
        tArray[0] = t;
        tArray[1] = t1;
        tArray[2] = t2;

        var g = from x in tArray group x by x.Id;
    }
}

class Test
{
    public string Id { get; set; }
    public string Val { get; set; }
}

現在,如果我看一下g,它有2個計數,其中一個是Id 123,第二個是Id1234。我不確定我的數組出了什么問題。 所以這似乎可行,但是我不確定我的陣列發生了什么。 我將對此進行一些研究。

抱歉,我發現了問題。 該ID位於MyArray中的value屬性中,該屬性未使用,因此無法正確分組。 感謝大家的幫助。

一切正常。

GroupBy產生一個IGrouping枚舉。 由於您有兩個不同的鍵(“ 123”和“ 1234”),您將獲得兩個元素的可枚舉值。 這些分組具有唯一鍵,它們本身就是可枚舉的。

所以

g.Where(x => x.Key == "123").ToList();

將包含兩個元素(第一,第二)和

g.Where(x => x.Key == "1233").ToList();

將包含一個元素(第三)。

暫無
暫無

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

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