如何解决按总和Linq分组到C#中的SQL
首先定义一个类来保存结果:
public class GroupedRow
{
public string UserDescription {get;set;}
public string ProjectDescription {get;set;}
public double SumOfHoursBetweenToAndFromDate {get;set;}
}
由于您已经应用了过滤,因此剩下要做的就是分组。
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();
(或其他语法)
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();
解决方法
确实对Linq进行SQL分组和求和非常困难,已经在所有地方进行了搜索,但是我不太了解如何将其他解决方案应用于我自己的解决方案。
我的数据库中有一个名为view_ProjectTimeSummary的视图,该视图具有以下字段:
string_UserDescription
string_ProjectDescription
datetime_Date
double_Hours
我有一个方法,该方法接受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>();
返回列表(用作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;
如何处理结果List <>以显示该用户和项目的to和from日期参数之间的double_Hours字段的 总和 (而不是每个日期的单独条目)?
例如具有以下字段的List <>:
string_UserDescription
string_ProjectDescription
double_SumOfHoursBetweenToAndFromDate
我是对的意思,这意味着我将不得不返回不同类型的List <>(因为它的字段少于view_UserTimeSummary)?
我读过要得到总和,就像是’group / by / into b’,但是通过查看其他解决方案不了解该语法的工作原理。有人可以帮助我吗?
谢谢史蒂夫
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。