これをどのように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<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+";
}
}
}
@ 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を作成する方法を知りません。ただし、次を使用できます。
たくさんのインライン条件ステートメント(? :
)、しかし、私は結果が効率的であるとは思わない。