C# 选择LINQ中的case

C# 选择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)

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

谢谢大家!

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

  • 使用存储过程(或函数),并从LINQ调用该存储过程
  • 当然,您可以使用很多内联条件语句(
    ?:
    ),但我认为结果不会很有效。

    像这样的

    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]
    ...