我有一個數據表,看起來像返回Groupedby不同LINQ值
Agency | Contact | Group
Agency1 person1 lunch runners
Agency1 person1 band
Agency1 person3 basketball
Agency2 person4 band
,我想通過代理它們分組,然後由聯繫人姓名。我曾嘗試過使用LINQ 50種不同的方法,但碰壁了。有人可以點亮一下嗎?謝謝。
我有一個數據表,看起來像返回Groupedby不同LINQ值
Agency | Contact | Group
Agency1 person1 lunch runners
Agency1 person1 band
Agency1 person3 basketball
Agency2 person4 band
,我想通過代理它們分組,然後由聯繫人姓名。我曾嘗試過使用LINQ 50種不同的方法,但碰壁了。有人可以點亮一下嗎?謝謝。
使用匿名類型:
var groups = table.AsEnumerable()
.GroupBy(r => new
{
Agency = r.Field<string>("Agency"),
Contact = r.Field<string>("Contact")
});
foreach (var agencyContactGroup in groups)
Console.WriteLine("Agency: {0} Contact: {1} Groups: {2} Count: {3}"
, agencyContactGroup.Key.Agency
, agencyContactGroup.Key.Contact
, string.Join(",", agencyContactGroup.Select(r => r.Field<string>("Group")))
, agencyContactGroup.Count());
輸出與樣品數據:
Agency: Agency1 Contact: person1 Groups: lunch runners,band Count: 2
Agency: Agency1 Contact: person3 Groups: basketball Count: 1
Agency: Agency2 Contact: person4 Groups: band Count: 1
collection.GroupBy(x => new { x.Agency, x.Contact })
應該這樣做。這將創建一個用於密鑰的匿名對象。
請注意,您必須將此一般想法應用到@TimSchmelter的答案中的DataTable中。
如果需要組的層次結構(即Agency1組有一個PERSON1組內),你可以這樣做:
collection.GroupBy(x => x.Agency).Select(x => x.GroupBy(y => y.Contact));
我不認爲這是對問題的正確解釋。您按代理機構將聯繫人姓名分組,然後按代理機構分組,然後按聯繫人姓名分組。 – Zong
@宗正立我做了一個修改,以解決你的評論。 –
var results = db.<EntityCollection>
.ToLookup(a => a.Agency)
.ToDictionary(lu => lu.Key, lu => lu.ToLookup(lui => lui.Contact));
然後可以訪問,如下所示:
results[<agencyName>][<contactName>]
這是一個對羣組進行分組的算法。將它應用於您的意願 – Moho
什麼是您的預期輸出? – Habib
你能展示你最好的嘗試嗎? –
你的意思是代理機構*,然後是合同名稱*?這聽起來像點菜! – Alireza