在LINQ中选择案例

如何将其转换为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 

谢谢!

也许这有效:

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

检查这可能对你有帮助

 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" : "-" }; 

使用类似的东西:

 class AgeHelper { private static Dictionary, string> dic = new Dictionary, 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+"; } } } 

@ Botz3000的其余部分回答:

 from u in users let range = new AgeHelper()[u.Age] ... 

像这样的东西?

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

我不知道如何使用LINQ语句创建这样的高效SQL。 但你可以使用:

  1. 使用存储过程(或函数),并从LINQ调用存储过程。
  2. 使用Direct SQL

当然你可以使用很多内联条件语句( ? : :),但我不认为结果会有效。