[英]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.