使用linq对sql结果进行分组

时间:2015-06-03 13:36:13

标签: c# sql linq

我有一个sql结果如下:

SehirID uniKodu
34      014
34      014
34      014
34      014
41      176
999     176
46      070
38      070

我需要一本字典

 Dictionary<uniKodu, Dictionary<SehirID, sumofSehirIDs>>

指的是

unikodu sehirId count
014      34     4     
070      46     1      
070      38     1 
176      999    1
176      41     1 

我怎么能用linq做到这一点?有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您想要的结果无效,因为字典的密钥必须是唯一的。 70176不是唯一的。但您可以使用由ToLookup创建的类似集合:

var uniKoduLookup = db.Table.ToLookup(x => x.uniKodu);

如果您现在想知道sehirID的{​​{1}}及其数量,请执行以下操作:

uniKodu=14

答案 1 :(得分:0)

这样的事情:

//From the Database (assuming something like this)
var result = Enumerable.Range(1, 1).Select(i => new { SehirId = 1, uniKodu =1 });

var dict = result
    .GroupBy(r => r.uniKodu)
    .ToDictionary(g => g.Key, g => g.ToDictionary(r => r.SehirId, g.Sum(r => r.SehirId)));

答案 2 :(得分:0)

这样的东西
var dict = result
    .GroupBy(o => new {o.SehirID, o.uniKodu})
    .ToDictionary(
        g => g.Key.uniKodu, 
        g => g.ToDictionary(
            r => r.SehirId, 
            r => g.Count(r.SehirId)
        )
    );