日期:2014-05-20  浏览次数:20763 次

急求LINQ表达式.
有如下数据表:

姓名 部门 工资 奖金 
----------------------------- 
张三 业务部 2200 300 
李四 资源部 3100 200 
王五 工 会 2800 100 
赵六 财务部 3300 500 
张三 业务部 1000 100 
马七 工程部 3300 300  
王五 工 会 1200 300 
------------------------------ 

想要合并后的结果如下: 

姓名 部门 工资 奖金 
----------------------------- 
张三 业务部 3200 400 
李四 资源部 3100 200 
王五 工 会 4000 400 
赵六 财务部 3300 500 
马七 工程部 3300 300  
------------------------------ 

即:把姓名和部门相同某人的工资奖金求和


该功能用 LINQ 语句如何写?

------解决方案--------------------
表结构
Staff (ID,Name ,Departments,Wage,Award) 依次为主键ID,姓名,部门,工资,奖金

linq写法
C# code

 var staffs = from p in db.Staff
              group p by new {Name=p.Name,Departments=p.Departments} into g
              select new 
              { 
                   Name=g.Key.Name,
                   Departments=g.Key.Departments,
                   TotalWage=g.Sum(p=>p.Wage),
                   TotalAward=g.Sum(p=>p.Award)
               };

------解决方案--------------------
探讨
表结构
Staff (ID,Name ,Departments,Wage,Award) 依次为主键ID,姓名,部门,工资,奖金

linq写法
C# code
var staffs= from pin db.Staff
group p bynew {Name=p.Name,Departments=p.Departments} into g
selectnew
{
Name=g.Key.Name,
Departments=g.Key.Departments,
TotalWage=g.Sum(p=>p.Wage),
TotalAward=g.Sum(p=>p.Award)
};

------解决方案--------------------
C# code
var array = new Foo[]{ 
      new Foo(){ Name="张三",Deprt="业务部", Salary=2200,  Bonus=300},
      new Foo(){ Name="李四",Deprt="资源部", Salary=3100,  Bonus=200},
      new Foo(){ Name="王五",Deprt="工  会", Salary=2800,  Bonus=100},
      new Foo(){ Name="赵六",Deprt="财务部", Salary=3300,  Bonus=500},
      new Foo(){ Name="张三",Deprt="业务部", Salary=1000,  Bonus=100},
      new Foo(){ Name="马七",Deprt="工程部", Salary=3300,  Bonus=300},
      new Foo(){ Name="王五",Deprt="工  会", Salary=1200,  Bonus=300}
    };

    var table = from item in array
          group new { Salary = item.Salary, Bonus = item.Bonus }
          by new { Name = item.Name, Deprt = item.Deprt } into grouping
          select new
          {
            Name = grouping.Key.Name,
            Depart = grouping.Key.Deprt,
            Salary = grouping.Sum(x=>x.Salary),
            Bonus = grouping.Sum(x=>x.Bonus)
          };

------解决方案--------------------

C# code
var table = array
            .GroupBy(item => new { Name = item.Name, Deprt = item.Deprt })
            .Select(grouping => new
            {
                Name = grouping.Key.Name,
                Depart = grouping.Key.Deprt,
                Salary = grouping.Sum(x => x.Salary),
                Bonus = grouping.Sum(x => x.Bonus)
            });