从JOIN获取DISTINCT值

时间:2013-02-08 17:08:21

标签: c# linq join distinct

我目前有以下LINQ语句:

using (MYEntities ctx = CommonMY.GetMYContext())
{
    List<datUser> lstC = (from cObj in ctx.datUser 
                          join fs in ctx.datFS on cObj.UserID equals fs.datUser.UserID 
                          where userOrg.Contains(fs.userOrg.OrgName)
                          select cObj).ToList();

    foreach (datUser c in lstC)
    {
        Claim x = new Claim
        {
            UserID= c.userID,
            FirstName = c.FirstName,
            LastName = c.LastName,
            MiddleName = c.MiddleName,
        };
    }
}

现在它返回所有用户,但如果他们有超过1个与之关联的组织,则会复制它们。 我怎样才能确保它只返回不同的UserID?

每个用户可以有多个组织,但我真的只需要返回userOrg列表中至少有一个组织的用户。

3 个答案:

答案 0 :(得分:1)

在你的ToList之前,放入.Distinct()

作为对@DJ BURB的回应,您应该使用IEqualityComparer中的Distinct重载来最好地确保您根据每条记录的唯一ID进行此操作。

查看this blog post的示例。

答案 1 :(得分:1)

使用group by。

语法:

var result= from p in <any collection> group p by p.<property/attribute> into grps
             select new 
             {
               Key=grps.Key,
               Value=grps
             } 

答案 2 :(得分:0)