2013-02-08 26 views
0

目前,我有以下LINQ声明:充分利用DISTINCT值的JOIN

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个组织。我如何确保它只返回不同的用户ID?

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

回答

1

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

作为对@DJ BURB的响应,您应该使用采用IEqualityComparer的Distinct重载,以便最好确保您基于每条记录的唯一ID执行此操作。

查看this blog post举例。

+2

难道他们需要指定值必须是不同的? – 2013-02-08 17:15:43

+0

谢谢,我如何指定我需要的独特价值? – 2013-02-08 18:32:59

+0

在自定义比较器的'Equals()'方法中(它应该接受2个'cObj'类型的变量),比较你想要的任何值,以确保它们是不同的。 – IronMan84 2013-02-08 18:40:56

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 
      } 
+0

所以我不需要选择cObj).ToList();? – 2013-02-08 18:42:53

+0

你仍然需要将整个东西包装在一个(var result .. {})。ToList()如果你希望最终结果如何 – Eamon 2013-02-11 20:21:22