C# 选择LINQ中的case
我如何将其转换为LINQC# 选择LINQ中的case,c#,sql,linq,tsql,linq-to-sql,C#,Sql,Linq,Tsql,Linq To Sql,我如何将其转换为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)
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
谢谢大家! 我不知道如何使用LINQ语句创建这样高效的SQL。但您可以使用:
?:
),但我认为结果不会很有效。
像这样的
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);
var users=(来自用户中的u)
选择新的
{
用户=u,
阿格朗格=
u、 年龄>=0&&u。年龄也许这是可行的:
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() };
来自用户中的u
让范围=(u.Age>=0和u.Age<10?-25):
u、 年龄>=10岁和美国年龄<15岁?“26-40”:
u、 年龄>=15岁和美国年龄<50?-60岁:
"50+")
按范围将u分组为g
选择新{g.Key,Count=g.Count()};
使用类似的方法:
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+";
}
}
}
可能的重复-,,以防有人遇到此问题并想知道“它们之间的区别是什么”可能只有一个是重复的was:stackoverflow.com/questions/436028/linq-to-sql-case-query,它没有在标题中指定范围,但它是答案。其他的仅限于case语句,但在特定的场景中。实际问题中标记的答案与问题指定的范围无关…所以…复制/从另一个@abatishchev粘贴-更改我认为这是一个很好的例子,但没有问题的答案由另一个例子更新+1哇这在很多方面帮助了我!
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+";
}
}
}
from u in users
let range = new AgeHelper()[u.Age]
...