【问题标题】:I'm trying to translate this sql query on Linq to sql query, but i have some difficult on Avg() and DateDiff()我正在尝试将 Linq 上的这个 sql 查询转换为 sql 查询,但我在 Avg() 和 DateDiff() 上有一些困难
【发布时间】:2017-08-06 11:42:25
【问题描述】:
select  AVG(DATEDIFF(yyyy, (p.BirthDay), GETDATE()))
from Person p

我正在尝试在 Linq to SQL 查询中转换此 SQL 查询。我的问题在于 AVG() 和 DATEDIFF()。

【问题讨论】:

标签: sql-server linq average datediff


【解决方案1】:

试试下面的方法

EF6

double resultAverage = ctx.Person.Average(p => DbFunctions.DiffDays(p.BirthDay, DateTime.Now));

EF4

double resultAverage = ctx.Person.Average(p => SqlFunctions.DateDiff("day" ,p.BirthDay, DateTime.Now));

也试试

double resultAverage = ctx.Person.Average(p => (DateTime.Now - p.BirthDay).Days);

【讨论】:

    【解决方案2】:

    **我解决了以下问题:**

    var query = (from A in ctx.Persons
                 select new {
                 AverageAge = ctx.Persons.Average(p => (Convert.ToInt32(DateTime.Now.ToString("yyyy")) - Convert.ToInt32(p.BirthDay)))
                 }).Distinct();
    

    注意:我已经像上面那样解决了它,因为 p.Birthday 返回一个“yyyy”格式的字符串。

    或者我也可以通过应用“Take(1)”而不是“Distinct()”来做到这一点,如下所示:

    var query = (from A in ctx.Persons
                 select new {
                 AverageAge = ctx.Persons.Average(p => (Convert.ToInt32(DateTime.Now.ToString("yyyy")) - Convert.ToInt32(p.BirthDay)))
                 }).Take(1);
    

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2018-04-15
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多