C# 从联接获取不同的值

C# 从联接获取不同的值,c#,linq,join,distinct,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

我目前有以下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,
        };
    }
}
使用(MYEntities ctx=CommonMY.GetMYContext())
{
列表lstC=(来自ctx.datUser中的cObj
将fs加入cObj上的ctx.datFS中。UserID等于fs.datUser.UserID
其中userOrg.Contains(fs.userOrg.OrgName)
选择cObj.ToList();
foreach(lstC中的datUser c)
{
索赔x=新索赔
{
UserID=c.UserID,
FirstName=c.FirstName,
LastName=c.LastName,
MiddleName=c.MiddleName,
};
}
}
现在它返回所有用户,但是如果他们有超过1个组织与他们关联,它会复制他们。 如何确保它只返回不同的用户标识


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

在您的ToList前面,输入
.Distinct()

为了响应@DJ BURB,您可能应该使用IEqualityComparer中的独特重载,以最好地确保您是根据每个记录的唯一id进行操作的

请看一个例子。

您必须呼叫,有。

使用分组方式

语法:

var result= from p in <any collection> group p by p.<property/attribute> into grps
             select new 
             {
               Key=grps.Key,
               Value=grps
             } 
var结果=从p组中的p乘以p。进入GRP
选择新的
{
Key=grps.Key,
价值=总收益率
} 

他们不需要指定需要区分的值吗?在自定义比较器的
Equals()
方法中(该方法应接受上面
cObj
类型的两个变量),只需比较您想要区分的值即可。对不起,什么Equals()方法?这是我需要补充的吗?或者你是说join语句中的等于?我是说在自定义比较器中,你可以将它放入Distinct方法的重载中。查看答案中的博文了解更多详细信息。因此我不需要选择cObj).ToList();?如果您希望最终结果是这样的,那么仍然需要将所有内容包装在(var result..{}).ToList()中