我正在尝试编写一个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 });
现在假设此查询返回如下结果:
No Email Area Sector VoteFunction Voter Email ====================================================================== 1. abc@gmail USA IT Sales voter2@gmail 2. abc@gmail Null IT Analyst voter2@gmail 3. abc@gmail USA IT null voter2@gmail 4. abc@gmail Europe Tech null voter2@gmail 5. abc@gmail Europe Accounts Analyst voter2@gmail 6. abc@gmail Europe null Analyst voter2@gmail 7. abc@gmail USA IT null voter1@gmail ======================================================================
还有一个字段VoterEmail
。所以基本上,我想计算每Area
,Sector
和VoteFunction
的投票数。
现在在上面的结果中,我想排除结果no 3和结果no 6.结果no 3因为它有面积和扇区,对于同一个选民也存在于结果1中,而我仍然希望保持结果no 7因为它有不同的选民。类似于结果no 6,它具有area和voteFunction,它也出现在结果no 5中。
对此有任何解决方案吗?
答案 0 :(得分:0)
所以你想为(Area,Sector,Voter email)制作具有相同值的项目组。如果这些组中的任何一个包含多个项目,那么显然您有多个具有相同值的对象(区域,扇区,选民电子邮件),并且您只想保留其中一个。
你说你想要排除没有3,因为它与没有1的值相同。同样地,我可以说我想排除没有1,因为它具有与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