vit*_*.sa 15 sql linq group-by sum
真的坚持使用Linq进行SQL分组和求和,已经到处搜索但我不太了解其他解决方案应用于我自己.
我的数据库中有一个名为view_ProjectTimeSummary的视图,它包含以下字段:
string_UserDescription
string_ProjectDescription
datetime_Date
double_Hours
Run Code Online (Sandbox Code Playgroud)
我有一个方法接受一个to和from日期参数,并首先创建此List <>:
List<view_UserTimeSummary> view_UserTimeSummaryToReturn =
(from linqtable_UserTimeSummaryView
in datacontext_UserTimeSummary.GetTable<view_UserTimeSummary>()
where linqtable_UserTimeSummaryView.datetime_Week <= datetime_To
&& linqtable_UserTimeSummaryView.datetime_Week >= datetime_From
select linqtable_UserTimeSummaryView).ToList<view_UserTimeSummary>();
Run Code Online (Sandbox Code Playgroud)
在返回List(用作datagridview的数据源)之前,我使用相同名称的参数过滤string_UserDescription字段:
if (string_UserDescription != "")
{
view_UserTimeSummaryToReturn =
(from c in view_UserTimeSummaryToReturn
where c.string_UserDescription == string_UserDescription
select c).ToList<view_UserTimeSummary>();
}
return view_UserTimeSummaryToReturn;
Run Code Online (Sandbox Code Playgroud)
如何操作生成的List <>以显示该用户的项目double_Hours和来自和来自日期参数之间的项目的总和(而不是每个日期的单独条目)?
例如包含以下字段的List <>:
string_UserDescription
string_ProjectDescription
double_SumOfHoursBetweenToAndFromDate
Run Code Online (Sandbox Code Playgroud)
我是对的,这意味着我将不得不返回一个不同类型的List <>(因为它的字段少于view_UserTimeSummary)?
我已经读过这样的总和它就像'group/by/into b'但是不明白这种语法如何通过查看其他解决方案...有人可以帮助我吗?
谢谢Steve
Amy*_*y B 34
首先定义一个类来保存结果:
public class GroupedRow
{
public string UserDescription {get;set;}
public string ProjectDescription {get;set;}
public double SumOfHoursBetweenToAndFromDate {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
既然你已经应用过滤,那么剩下要做的就是组.
List<GroupedRow> result =
(
from row in source
group row by new { row.UserDescription, row.ProjectDescription } into g
select new GroupedRow()
{
UserDescription = g.Key.UserDescription,
ProjectDescription = g.Key.ProjectDescription,
SumOfHoursBetweenToAndFromDate = g.Sum(x => x.Hours)
}
).ToList();
Run Code Online (Sandbox Code Playgroud)
(或其他语法)
List<GroupedRow> result = source
.GroupBy(row => new {row.UserDescription, row.ProjectDescription })
.Select(g => new GroupedRow()
{
UserDescription = g.Key.UserDescription,
ProjectDescription = g.Key.ProjectDescription,
SumOfHoursBetweenToAndFromDate = g.Sum(x => x.Hours)
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55473 次 |
最近记录: |