代码之家  ›  专栏  ›  技术社区  ›  user215675

SQL到LINQ等效

  •  0
  • user215675  · 技术社区  · 15 年前

    如何将以下SQL转换为LINQ

    select sum(salary),Deptid from person where deptid=1 or deptid=2 group by
    deptid 
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Mark Byers    15 年前
            var salaries = persons
                .Where(p => p.DeptId == 1 || p.DeptId == 2)
                .GroupBy(p => p.DeptId)
                .Select(x => new { DeptId = x.Key, TotalSalary = x.Sum(p => p.Salary)});
    

    下面是一个完整的例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    class Program
    {
        class Person
        {
            public int DeptId { get; set; }
            public int Salary { get; set; }
        }
    
        static void Main(string[] args)
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person { DeptId = 1, Salary = 10000 });
            persons.Add(new Person { DeptId = 1, Salary = 20000 });
            persons.Add(new Person { DeptId = 1, Salary = 30000 });
            persons.Add(new Person { DeptId = 2, Salary = 40000 });
            persons.Add(new Person { DeptId = 3, Salary = 50000 });
    
            var salaries = persons
                .Where(p => p.DeptId == 1 || p.DeptId == 2)
                .GroupBy(p => p.DeptId)
                .Select(x => new { DeptId = x.Key, TotalSalary = x.Sum(p => p.Salary)});
    
            foreach (var dept in salaries)
                Console.WriteLine("{0}: {1}", dept.DeptId, dept.TotalSalary);
        }
    }
    

    输出:

    1: 60000
    2: 40000
    
        2
  •  3
  •   Jan Jongboom    15 年前
    var qry = from p in dc.Persons
    where p.deptid==1 || p.deptid==2
    group p by p.deptid into g
    select new { Total = g.Sum(q=>q.salary), DeptId=g.Key };