首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急求LINQ表达式.解决思路

2012-02-20 
急求LINQ表达式.有如下数据表:姓名部门工资奖金-----------------------------张三业务部2200300李四资源

急求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)            }); 

热点排行