Linq Union,避免空数据和重复数据

我正在尝试编写一个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 @ gmail

2. abc @ gmail空IT分析师表决器2 @ gmail

3. abc @ gmail美国IT空null选民2 @ gmail

4. abc @ gmail欧洲技术公司null null选民2 @ gmail

5. abc @ gmail欧洲帐户分析师表决器2 @ gmail

6. abc @ gmail欧洲null分析员选民2 @ gmail

7. abc @ gmail美国IT null投票者1 @ gmail

================================================== ====================

还有一个领域VoterEmail。所以基本上,我想算每票Area,Sector和VoteFunction。现在在上面的结果中,我想排除结果3和结果6。结果3是因为它的面积和扇区也出现在同一选民的结果1中,而我仍然想保留结果7因为它具有不同的选民。与结果6相似,它具有area和voteFunction,结果5也存在。


有什么解决办法吗?


紫衣仙女
浏览 335回答 1
1回答

智慧大石

因此,您希望将具有相同值的项目组(区域,部门,选民电子邮件)组成。如果这些组中的任何一个包含多个项目,则显然您有几个具有相同值的对象(“区域”,“部门”,“选民电子邮件”),并且您只想保留其中一个。您说要排除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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go