【问题标题】:linq group by statementlinq 按语句分组
【发布时间】:2011-01-19 21:49:27
【问题描述】:

我有一个包含日期的对象 MyObject。 我有以下查询,其中 TheMonth 和 TheYear 是参数:

var MyQuery = from a in MyModelDC.MyTable
              where a.Month == TheMonth
              where a.Year == TheYear
              select new MyObject
                   {

                        var1 = a.Day,

                        var2 = (from b in MyModel.MyTable
                                where b.Month == a.Month
                                where b.Year == a.Year
                                select b.Identity).Count()
                    };

我想对结果进行分组,以便每天只出现一次。 Var 2 是一个计数,此时计数的行正在为每次出现的 Identity 重复,而不是每天唯一。

谢谢。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    如果我正确理解您的要求,我认为这将满足您的要求:

    var myQuery = from date in MyModelDC.MyTable
                  where date.Month == TheMonth && date.Year == TheYear
                  group date by date.Day into dayGroup
                  select new
                  {
                      Day = dayGroup.Key,
                      Count = dayGroup.Count()
                  };
    

    在这里,我们首先将每个项目按其所指的日期分组,然后对组中的每个项目进行计数,以便仅包含该组特定日期的项目。

    更新
    要使用 MyObject 作为输出,您可以这样做:

    var myQuery = from date in MyModelDC.MyTable
                  where date.Month == TheMonth && date.Year == TheYear
                  group date by date.Day into dayGroup
                  select new MyObject
                  {
                      var1 = dayGroup.Key,
                      var2 = dayGroup.Count()
                  };
    

    【讨论】:

    • dayGroup 没有可用的 .Key 属性,仅适用于 dayGroups。你能澄清一下吗?
    • @frenchie:我的错误 - 请参阅修订后的编辑。我回答并忘记检查我的答案。我道歉。至于提取MyObject,您可以随时将我的select 语句替换为您所拥有的,如果您需要的话。
    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多