2009-12-12 95 views
0

如何以下SQL转换为LINQSQL到LINQ等效

select sum(salary),Deptid from person where deptid=1 or deptid=2 group by 
deptid 
+0

发生了什么事到你的第二个问题?它被删除了......是你删除了它吗? –

+0

我问,因为我即将发布的答案,然后StackOverflow告诉我,我不能,因为它已被删除。 –

+0

对不起,我删除了它 – user215675

回答

3
 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 
3
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 }; 
+0

小心:裸头回答:-) –

+0

+1有帮助的回复 – user215675