2017-08-06 19 views
0
select AVG(DATEDIFF(yyyy, (p.BirthDay), GETDATE())) 
from Person p 

我试图将这个SQL查询转换为SQL查询。我的问题是AVG()和DATEDIFF()。我试图将LINQ上的这个SQL查询转换为SQL查询,但我有一些困难的Avg()和DateDiff()

+0

,而不是试图把它翻译,尝试思考它是做什么并考虑如何去做。 https://stackoverflow.com/questions/4590704/get-average-using-linq https://stackoverflow.com/questions/9/calculate-age-in-c-sharp – Lewis42

+0

也DATEDIFF(yyyy,p.Birthday, GetDate())返回该人见过的除夕的数量,而不是他们的年龄。 –

回答

0

尝试像下面

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

tryAlso

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

**我解决做象下面这样:**

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”格式返回一个字符串。

我也可以做到这一点还通过应用“以(1)”而不是“另类()”象下面这样:

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