选择和GroupBy

时间:2014-02-19 12:25:12

标签: c# linq

我有一个包含以下字段的表

ID
fk_siteID
VisitDate

我想用LINQ编写一个查询,该查询返回一天中具有特定SiteID的记录数。例如,如果siteid=1显示我

12.1.2014   6
13.1.204    8

我写了这个查询

 var n = from a in db.CompanyWebsiteUsers
         group a by EntityFunctions.TruncateTime(a.VisitDate) into g
         orderby g.FirstOrDefault().VisitDate
         where  g.FirstOrDefault().fk_siteID == WebsiteID
         select new
         {
             key = g.Key,
             dayofweek = SqlFunctions.DateName("weekday", g.Key),
             count = g.Count()
         };
grdDailyRes.DataSource = n;
grdDailyRes.DataBind();

显示此查询的结果: 当我的表中有2条记录时,这些记录的VisitDate字段与siteid=1和第二siteid=2中的一条相同。 如果websiteid为1或2,则此查询首先计算。

1 个答案:

答案 0 :(得分:1)

您只检查组中的第一项,但您还必须检查其他项目。最简单的解决方案是移动where语句,即

var n = from a in db.CompanyWebsiteUsers
                    where  a.fk_siteID == WebsiteID
                    group a by EntityFunctions.TruncateTime(a.VisitDate) into g
                    orderby g.FirstOrDefault().VisitDate
                    select new