【问题标题】:one query with groupby / count / select new一个查询 groupby / count / select new
【发布时间】:2013-12-26 10:24:17
【问题描述】:

我必须在 c# 中使用 linq to sql 进行查询。我可以在 sql 中处理它,但在 linq 中 sql 不是我想要得到的结果。 所以有一张桌子:

  • 一天,日期时间,日期和时间
  • 还有一种id

我必须计算每个日期的 id,时间并不重要。所以结果 应该是这样的:

day: 2013-11-12 amountIDs: 4

人们对我说,我可以进行选择新查询,在此查询中我可以设置日期 并且可以计算id,或者我每天做一个组。我读过类似的问题,但它不适用于我的情况。

有人可以帮我吗?

我用下面的语句试过了,但是天必须分组,所以现在输出是foreach datetime,像这样

day: 12.12.2013 12:00:00 amountIDs: 1
day: 12.12.2013 12:10:10 amountIDs: 1

在sql中我做了这样的声明:

SELECT CONVERT(VARCHAR(20), data.dayandtime, 106) AS day, count(data.amountIds) as ids 
FROM data
WHERE ( data.dayandtime >= DATEADD(day, -28, getdate()) AND (data.type = 100) AND (data.isSomething = 0) )
GROUP BY CONVERT(VARCHAR(20), data.dayandtime, 106), data.isSomthing and it works.

我看到了类似的案例,人们做了一个 :from-select-new xyz 声明,然后我对其进行了查看并尝试仅对视图进行分组。像这样

var query = data.GroupBy(g => g.day.Value).ToList();

【问题讨论】:

  • 向我们展示查询;提供您将其转换为 LinqToSql 查询的步骤,这样我们也许可以告诉您哪里出错了
  • 我重写了我的问题。现在更具体了吗?

标签: c# linq linq-to-sql


【解决方案1】:
 var qry = from data in dbContext   
           group data by data.day into dataGrpd
                  select new
                  {
                      day= dataGrpd.Key,
                      amountIDs= dataGrpd.Select(x => x.Id).Distinct().Count()
                  };

Check This

【讨论】:

  • 我更改了:data.day 为 data.day.Value.toShortDateString()。现在它按我想要的方式工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多