读书人

急求LINQ表达式.解决思路

发布时间: 2012-02-20 21:18:24 作者: rapoo

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

读书人网 >.NET

热点推荐