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

Je suis en train de traduire cette requête SQL dans une requête Linq to SQL. Mes problèmes sont avec AVG() et DATEDIFF().Je suis en train de traduire cette requête sql sur requête Linq en SQL, mais j'ai des difficultés sur Avg() et DateDiff()

+0

Au lieu d'essayer de le traduire, essayez de penser à ce qu'il fait et réfléchissez à des façons de le faire. https://stackoverflow.com/questions/4590704/get-average-using-linq https://stackoverflow.com/questions/9/calculate-age-in-c-sharp – Lewis42

+0

Aussi DATEDIFF (aaaa, p.Anniversaire, GetDate()) renvoie le nombre de réveillons du Nouvel An que la personne a vu, pas leur âge. –

Répondre

0

Essayez quelque chose comme ci-dessous

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

** Je RESOUDRE faire comme ci-dessous: **

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

NOTE: Je l'ai résolu comme ci-dessus, car p.Birthday renvoie une chaîne au format "aaaa".

Ou je pouvais le faire aussi par l'application « Take (1) » au lieu de « Distinct() » comme ci-dessous:

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