2017-08-06 33 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);