【问题标题】:create a query for date and average values创建日期和平均值查询
【发布时间】:2012-07-09 17:12:01
【问题描述】:

我需要从数据上下文的表中选择日期和平均值,并且需要按年和月对其进行分组。 在 SQL 中它看起来像这样

select Year(data) as years, Month(data) as months, Avg(value) as prices from Prices
group by Year(data),MONTH(data)
order by years, months

我创建了一个 LINQ 查询

var query0 = from c in dc.Prices
             where Convert.ToDateTime(c.data).CompareTo(left) >= 0
                   && Convert.ToDateTime(c.data).CompareTo(right) <= 0
                   && c.idsticker.Equals(x)
              group c by new { ((DateTime)c.data).Year, ((DateTime)c.data).Month }
                    into groupMonthAvg
              select groupMonthAvg;

但我不知道如何在结果中获取平均值

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    使用平均功能。

    var query0 = from c in dc.Prices
                 where Convert.ToDateTime(c.data).CompareTo(left) >= 0
                       && Convert.ToDateTime(c.data).CompareTo(right) <= 0
                       && c.idsticker.Equals(x)
                  group c by new { ((DateTime)c.data).Year, ((DateTime)c.data).Month }
                        into groupMonthAvg
                  select new
                  {
                      years = groupMonthAvg.Key.Year,
                      months = groupMonthAvg.Key.Month,
                      prices = groupMonthAvg.Average(x=>x.value)
                  };
    

    【讨论】:

      【解决方案2】:

      只需在您的select 中使用Average 函数:

      var query0 = from c in dc.Prices
               where Convert.ToDateTime(c.data).CompareTo(left) >= 0
                     && Convert.ToDateTime(c.data).CompareTo(right) <= 0
                     && c.idsticker.Equals(x)
                group c by new { ((DateTime)c.data).Year, ((DateTime)c.data).Month }
                      into groupMonthAvg
                select new {
                    groupMonthAvg.Key.Year, 
                    groupMonthAvg.Key.Month, 
                    YearAverage = groupMonthAvg.Average(x=>x.Year),
                    MonthAverage = groupMonthAvg.Average(x=>x.Month)
                    };
      

      【讨论】:

        【解决方案3】:

        应该这样做:

        var query0 = from c in dc.Prices
                     where Convert.ToDateTime(c.data).CompareTo(left) >= 0
                           && Convert.ToDateTime(c.data).CompareTo(right) <= 0
                           && c.idsticker.Equals(x)
                      group c by new { ((DateTime)c.data).Year, ((DateTime)c.data).Month }
                            into groupMonthAvg
                      select new { Year = groupMonthAvg.Key.Year, Month = groupMonthAvg.Key.Month, Average => groupMonthAvg.Average(i => i.value) };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-16
          • 2016-07-09
          • 2020-07-25
          相关资源
          最近更新 更多