【问题标题】:Implementing COUNT() and ROUND() method in LINQ query在 LINQ 查询中实现 COUNT() 和 ROUND() 方法
【发布时间】:2015-12-14 04:17:01
【问题描述】:

对于另一个获取数据透视表的返回数据的示例,我定义了一个LINQ 查询来解决这个问题。那么,现在我的问题是如何计算一列的值?

下面是 C# 代码:

var query = from q in db.DS
            where q.datum >= fromDate && q.datum <= toDate
            group q by q.quot_rate
              into grp
              select new
              {
                 Grade = grp.Key,
                 Total = grp.Select(t => new { t.fon, t.quot_rate }).AsQueryable()
              };

            var rate = (from q in db.DS
                        select q.fon).Distinct();

            DataTable dt = new DataTable();

            dt.Columns.Add("Grade");

            foreach (var r in rate)
            {
                dt.Columns.Add(r.ToString());
            }

            foreach (var q in query)
            {
                DataRow dr = dt.NewRow();
                dr["Grade"] = q.grade; //round q_grade

                foreach (var t in q.Total)
                {
                    dr[t.fon] = t.quot_rate; //count t.quot_rate
                }

                dt.Rows.Add(dr);
            }

            return dt;

您可以看到编号必须为ROUND()COUNT() 的cmets。

我该如何定义?


编辑:

目前输出如下:

Grade | AB001 | AB002 | AB003 ...
90,045| 90,045| null  |  null
85,590| null  | 85,590|  85,590
85,450| null  | 85,450|  null
84,901| null  | 84,901|  null

我想要的结果如下:

Grade | AB001 | AB002 | AB003 ...
90    |   1   |   0   |    0
86    |   0   |   1   |    1
85    |   0   |   2   |    0

【问题讨论】:

  • 您按quot_rate 进行分组,但您将属性命名为Grade,这是拼写错误吗?您需要更好地解释您的要求。目前还不清楚你在做什么以及你真正想要什么。
  • 你要数什么?组中的项目数,或每个组的“quot_rate”列中不同值的数量?
  • @Andrei 例如 quot_rate = 90,509 ,AB001 = 90,509 是当前的视图。我想ROUND()quot_rate 的值为 90,509 = 91 和 COUNT() AB001 = 1
  • @TimSchmelter Grade 称为列标题,quot_rate 值添加到列Grade
  • @Andrei 我正在更新我的帖子。请参阅上面的输出表。

标签: c# asp.net linq asp.net-web-api


【解决方案1】:

看来您实际上希望在查询中进行舍入,以便您可以按舍入值进行分组。所以问题的第一部分可以回答为:

Grade = Math.Round(grp.Key),

然后计数自然会出现:

q.Total.Count()

但是,您似乎实际上希望按rate 项目计数,所以我建议对每个表格行进行类似的操作:

foreach (var r in rate)
{
    dr[r] = q.Total.Count(x => x.fon == r);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多