简体   繁体   中英

create a query for date and average values

I need to select date and average values from a datacontext's table and I need to group it by year and by month. In SQL it will look like this

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

I've created a LINQ query

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;

But I don't know how to get average values in result

Just use the Average function in your select :

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)
              };

This should do it:

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) };

Use the Average function.

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)
              };

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM