Nan*_*du 24 c# sql linq group-by
我无法使用LINQ查询解决此问题.
所以我们有如下表结构:Id || bug_category || bug_name || bug_details || bug_priority
我想先通过bug_category进行分组.对于每个bug_category,我想反过来按bug_priority分组.
所以我基本上想要这样的东西:
bug_category = AUDIO ::没有BUGS - > Critical = 3,Medium = 2和Low = 7个bug.
bug_category = VIDEO ::没有BUGS - > Critical = 5,Medium = 1和Low = 9个bug.
以下查询返回类别AND customer_priority的所有唯一组合:
(其中RawDataList只是具有上述结构的数据列表)
var ProceesedData = from d in RawDataList
group d by new { d.bug_category, d.bug_priority } into g
select new
{
g.Key.bug_category,
g.Key.bug_priority
};
Run Code Online (Sandbox Code Playgroud)
以下查询返回该类别,后跟该类别中的记录列表:
var ProceesedData = from d in RawDataList
group d by d.bug_category into g
select new { g.Key, records = g
};
Run Code Online (Sandbox Code Playgroud)
但是我无法继续进行,因为ProcessedData(返回变量)是一个未知类型.有什么想法吗?
Aar*_*nLS 30
这是完成嵌套分组的更简单方法.我已经在内存集合中对其进行了测试,无论您的特定数据库提供程序是否能够很好地处理它,或者它是否表现良好都是未知的.
假设你有两个属性,并希望按州和国家分组:
var grouped = People
.GroupBy(l => new { l.State, l.Country})//group by two things
.GroupBy(l=> l.Key.Country)//this will become the outer grouping
foreach(var country in grouped)
{
foreach(var state in country)
{
foreach(var personInState in state)
{
string description = $"Name: {personInState.Name}, State: {state.StateCode}, Country: {country.CountryCode}";
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 29
我怀疑你想要(名字改为更惯用):
var query = from bug in RawListData
group bug by new { bug.Category, bug.Priority } into grouped
select new {
Category = grouped.Key.Category,
Priority = grouped.Key.Priority,
Count = grouped.Count()
};
Run Code Online (Sandbox Code Playgroud)
然后:
foreach (var result in query)
{
Console.WriteLine("{0} - {1} - {2}",
result.Category, result.Priority, result.Count);
}
Run Code Online (Sandbox Code Playgroud)
或者(但稍后见):
var query = from bug in RawListData
group bug by new bug.Category into grouped
select new {
Category = grouped.Category,
Counts = from bug in grouped
group bug by grouped.Priority into g2
select new { Priority = g2.Key, Count = g2.Count() }
};
foreach (var result in query)
{
Console.WriteLine("{0}: ", result.Category);
foreach (var subresult in result.Counts)
{
Console.WriteLine(" {0}: {1}", subresult.Priority, subresult.Count);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,这将导致多个SQL查询.要获得类似的结果结构,但更有效率,您可以使用:
var dbQuery = from bug in RawListData
group bug by new { bug.Category, bug.Priority } into grouped
select new {
Category = grouped.Key.Category,
Priority = grouped.Key.Priority,
Count = grouped.Count()
};
var query = dbQuery.ToLookup(result => result.Category,
result => new { result.Priority, result.Count };
foreach (var result in query)
{
Console.WriteLine("{0}: ", result.Key);
foreach (var subresult in result)
{
Console.WriteLine(" {0}: {1}", subresult.Priority, subresult.Count);
}
}
Run Code Online (Sandbox Code Playgroud)
我想你正在寻找类似的东西:
var processedData =
rawData.GroupBy(bugs => bugs.bug_category,
(category, elements) =>
new
{
Category = category,
Bugs = elements.GroupBy(bugs => bugs.bug_priority,
(priority, realbugs) =>
new
{
Priority = priority,
Count = realbugs.Count()
})
});
foreach (var data in processedData)
{
Console.WriteLine(data.Category);
foreach (var element in data.Bugs)
Console.WriteLine(" " + element.Priority + " = " + element.Count);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26300 次 |
| 最近记录: |