当前位置: 首页 > 面试题库 >

按总和Linq分组到C#中的SQL

万俟承望
2023-03-14
问题内容

确实对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字段的 总和 (而不是每个日期的单独条目)?

例如具有以下字段的Lis​​t <>:

string_UserDescription
string_ProjectDescription
double_SumOfHoursBetweenToAndFromDate

我是对的意思,这意味着我将不得不返回不同类型的List <>(因为它的字段少于view_UserTimeSummary)?

我读过要得到总和,就像是’group / by / into b’,但是通过查看其他解决方案不了解该语法的工作原理。有人可以帮助我吗?

谢谢史蒂夫


问题答案:

首先定义一个类来保存结果:

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();


 类似资料:
  • 问题内容: 有没有办法在单个查询中按类别和所有产品的总价获取所有产品的总价。 以下是查询,我正在使用按类别给出价格。 问题答案: 在查询中使用ROLLUP。 GROUP BY子句允许使用WITH 修饰符,从而将多余的行添加到摘要输出中。

  • 问题内容: 这应该很简单,但是让我受益匪浅。 我所拥有的只是一个只有两列的表格,如下所示: 等等。 我想计算 每天 的 总字数 -我将它们按日期添加分组并选择WordCount的总和,最后得到语法错误(wordcount必须在group by子句中),但是现在我得到的天数为null 这是我的查询: 这只是选择null。我怎么知道怎么了? 谢谢。 问题答案: 如果您使用该怎么办: 我不明白您为什么还

  • 结果将是 4961CA21-7F36-44E7-9827-002263A32F73 如何从数组中按值打印名称

  • 问题内容: 我正在尝试转换此查询(已经可以使用) 对于Linq to SQL,但我不知道自己在做什么错。看我的尝试 我只需要对建筑物进行分组并计算每个建筑物有多少用户。 问题答案: 只需使用以下方法:

  • 我在ID号中包含姓名数据以及许多关联值。它看起来像这样: 我想创建名称的所有组合,不管有多少个,并将它们粘贴在一起,用逗号分隔,并在每个id中求其编号和值的总和。上述示例的预期输出为: 谢谢大家!

  • 本文向大家介绍全面分析c# LINQ,包括了全面分析c# LINQ的使用技巧和注意事项,需要的朋友参考一下 大家好,这是 [C#.NET 拾遗补漏] 系列的第 08 篇文章,今天讲 C# 强大的 LINQ 查询。LINQ 是我最喜欢的 C# 语言特性之一。 LINQ 是 Language INtegrated Query 单词的首字母缩写,翻译过来是语言集成查询。它为查询跨各种数据源和格式的数据提