我正在尝试编写一个linq查询来合并2个集合,下面对此进行了说明:public class VoteData{ public string Name{get;set;} public string VoteFunction {get;set;} public string Area {get;set;} public string Sector {get;set;} public string Email {get;set;} public string VoterEmail {get; set;}}public class DirectoryData{ public string VoteFunction {get;set;} public string Area {get;set;} public string Sector {get;set;} public string PrimaryEmail {get;set;} public string VoterEmail {get; set;}}Linq查询: var result = (from r in voteList select new { r.Email, r.Area, r.Sector, r.VoteFunction }).Union (from d in directoryDataList select new { Email = d.PrimaryEmail, d.Area, d.Sector, d.VoteFunction });现在假设此查询返回如下结果:没有电子邮件区域部门投票功能投票人电子邮件================================================== ====================1. abc @ gmail美国IT销售票务员2 @ gmail2. abc @ gmail空IT分析师表决器2 @ gmail3. abc @ gmail美国IT空null选民2 @ gmail4. abc @ gmail欧洲技术公司null null选民2 @ gmail5. abc @ gmail欧洲帐户分析师表决器2 @ gmail6. abc @ gmail欧洲null分析员选民2 @ gmail7. abc @ gmail美国IT null投票者1 @ gmail================================================== ====================还有一个领域VoterEmail。所以基本上,我想算每票Area,Sector和VoteFunction。现在在上面的结果中,我想排除结果3和结果6。结果3是因为它的面积和扇区也出现在同一选民的结果1中,而我仍然想保留结果7因为它具有不同的选民。与结果6相似,它具有area和voteFunction,结果5也存在。有什么解决办法吗?
1 回答
智慧大石
TA贡献1946条经验 获得超3个赞
因此,您希望将具有相同值的项目组(区域,部门,选民电子邮件)组成。如果这些组中的任何一个包含多个项目,则显然您有几个具有相同值的对象(“区域”,“部门”,“选民电子邮件”),并且您只想保留其中一个。
您说要排除No 3,因为它与No 1具有相同的值。同样,我可以说我要排除No 1,因为它与No 3具有相同的值。请问它是1还是3,还是可以?我只是选择其中一个?
var finalResult = unionResult
.GroupBy(item => new // make groups of items with same Area / Sector / VoterEmail
{
Area = item.Area,
Sector = item.Sector,
VoterEmail = item.VoterEmail,
});
// all items in every group have the same Area/Sector/VoterEmail
.Select (group => group.First()); // from every group take the first one
- 1 回答
- 0 关注
- 334 浏览
添加回答
举报
0/150
提交
取消