comment puis-je traduire cela en LINQ?
select t.age as AgeRange, count(*) as Users
from (
select case
when age between 0 and 9 then ' 0-25'
when age between 10 and 14 then '26-40'
when age between 20 and 49 then '60-100'
else '50+' end as age
from user) t
group by t.age
Je vous remercie!
Peut-être que cela fonctionne:
from u in users
let range = (u.Age >= 0 && u.Age < 10 ? "0-25" :
u.Age >= 10 && u.Age < 15 ? "26-40" :
u.Age >= 15 && u.Age < 50 ? "60-100" :
"50+")
group u by range into g
select new { g.Key, Count=g.Count() };
vérifiez que cela peut vous aider
var query = from grade in sc.StudentGrade
join student in sc.Person on grade.Person.PersonID
equals student.PersonID
select new
{
FirstName = student.FirstName,
LastName = student.LastName,
Grade = grade.Grade.Value >= 4 ? "A" :
grade.Grade.Value >= 3 ? "B" :
grade.Grade.Value >= 2 ? "C" :
grade.Grade.Value != null ? "D" : "-"
};
Utilisez quelque chose comme ça:
class AgeHelper
{
private static Dictionary<IEnumerable<int>, string> dic = new Dictionary<IEnumerable<int>, string>
{
{ Enumerable.Range(0, 10), "0-25" },
{ Enumerable.Range(10, 5), "26-40" },
{ Enumerable.Range(15, 35), "60-100" }
};
public string this[int age]
{
get
{
return dic.FirstOrDefault(p => p.Key.Contains(age)).Value ?? "50+";
}
}
}
Le reste de la réponse de @ Botz3000:
from u in users
let range = new AgeHelper()[u.Age]
...
Quelque chose comme ça?
var users = (from u in Users
select new
{
User = u,
AgeRange =
u.Age >= 0 && u.Age <= 9 ? "0-25" :
u.Age <= 14 ? "26-50" :
u.Age <= 49 ? "60-100":
"50+"
}).GroupBy(e => e.AgeRange);
Je ne connais aucun moyen de créer un SQL efficace comme celui-ci, en utilisant une instruction LINQ. Mais vous pouvez utiliser:
Bien sûr, vous pouvez utiliser de nombreuses instructions conditionnelles en ligne (? :
), mais je ne pense pas que le résultat sera efficace.