【发布时间】:2015-01-28 17:00:23
【问题描述】:
假设我们有以下 List/IEnumerable
Program : CPE, ECE
旧名单:
Name Assigned_Area Program
Ivan Matala Mathematics CPE
Ivan Matala Mathematics ECE
Jeremy Cruz Science ECE
Ivan Matala Science CPE
NJ Aquino Engineering CPE
MJ Catanaoan Engineering ECE
新列表:
Name Assigned_Area Program
Ivan Matala Mathematics All Programs
Jeremy Cruz Science ECE
Ivan Matala Science CPE
NJ Aquino Engineering CPE
MJ Catanaoan Engineering ECE
基本上,我想做的是合并每条'Name'和'Assigned_Area'字段相同的记录,如果每条记录都有两个程序(在我们的例子中:'CPE'和'ECE'),那么它应该只是折叠成一行,其 Program 现在是“All Programs”。
我们如何使用 LINQ 做到这一点?
到目前为止我尝试的是以下不完整的代码
var newlist = oldlist.GroupBy(x => x.Assigned_Area);
基本上,我正在考虑将那些具有相同分配区域的记录分组,但上面的代码不完整,因为它只考虑一个字段(我需要考虑 2 个字段,即“名称”和“分配区域”),然后,如果每个分组的计数为 2,则计数错误,如果计数为 2,则我会将其折叠为一条记录,并将程序替换为“所有程序”。
后续问题,但与上述有关..
上述问题适用于非匿名类。基本上,我真正的问题是,我有以下代码
public IEnumerable GetOfficialList(int visitID)
{
db = new PACUCOADB5Entities();
var x = (from a in db.Accreditor_Program
orderby a.Accreditor.Given_Name, a.Accreditor.Middle_Initial, a.Accreditor.Surname, a.Assigned_Area, a.Program.Requested_Program ascending
where a.Program.Visit.VisitID == visitID
select new
{
a.Accreditor.Title,
a.Accreditor.Given_Name,
a.Accreditor.Middle_Initial,
a.Accreditor.Surname,
a.Assigned_Area,
a.Program.Requested_Program
}).ToList();
return x
}
如您所见,“x”是我的列表/IEnumerable,我试图将相同的概念应用于我正在处理的代码......基本上,我也想做同样的事情,但我的尝试没有成功以下代码
var newx = x.GroupBy(xx => new {xx.Title,xx.Given_Name,xx.Middle_Initial,xx.Surname,xx.Assigned_Area})
.Select(xx => new {xx.Key.Title, xx.Key.Given_Name, xx.Key.Middle_Initial, xx.Key.Surname, xx.Key.Assigned_Area, xx.Count() == 2 ? "All Programs" :x.First(y => y.Title == xx.Key.Title && y.Given_Name == xx.Key.Given_Name && y.Middle_Initial == xx.Key.Middle_Initial && y.Surname == xx.Key.Surname && y.Assigned_Area == xx.Key.Assigned_Area).Requested_Program));
但通过我的智能感知错误
我们如何解决它?给定该代码,我们如何删除重复项。谢谢
【问题讨论】:
标签: c# linq duplicate-removal