2014-01-12 61 views
-2

我有两个不同类型的两个列表:加入两个列表具有唯一值

  • List<LoginTable> loginList = AllLoginTableUser();
  • List<UserInformation> users = GetAllUserInformation();

其列:

  • LoginTable包含登录ID,密码,帐户状态。
  • UserInformation包含LoginId,FullName,FatherName,JoinDate,DateofBirth。

我需要一个新的名单,通过加入上述两个名单LoginId。我不需要重复的值。

我尝试这个代码,但它返回多个值,如果LoginId = 100那么它显示100两次。

var joined = (from item1 in loginList 
       join item2 in users on item1.LoginId equals item2.LoginId 
       orderby item1.LoginId 
       select new 
       { 
        item1.Password, 
        item2.LoginId, 
        item2.FullName, 
        item2.FatherName, 
        item2.DOB, 
        item2.JoinDate 
       }).ToList(); 
+0

这应该工作正常。每个表只有一次“100”吗?你回来的两条线是什么样的? –

+0

@GrantWinney是的LoginId即100,101等仅在每个表中出现一次。当我尝试加入这两个列表时,它会为每个LoginId填充2-2个值。 –

+0

你的第一个问题是你在其中一个输入列表中有重复。首先解决这个问题,而不是之后修复它。你如何确认输入列表是唯一的?你能否显示[SSCCE](http://sscce.org)? – BartoszKP

回答

1

使用joined.Distint()方法唯一值..

+0

好的,我会试试.. –

1
var joined = (from item1 in loginList 
         join item2 in users 
         on item1.LoginId equals item2.LoginId 
         orderby item1.LoginId 
          select new UserData 
          { 
           Password = item1.Password, 
           LoginId = item2.LoginId, 
           FullName = item2.FullName, 
           FatherName = item2.FatherName, 
           DOB = item2.DOB, 
           JoinDate = item2.JoinDate 

          }).Distinct(new UserDataComparer()).ToList(); 

public class UserData 
{ 
    public string Password {get;set;} 
    public int LoginId {get;set;} 
    public string FullName {get;set;} 
    public string FatherName {get;set;} 
    public DateTime DOB {get;set;} 
    public DateTime JoinDate {get;set;}     
} 

public class UserDataComparer : IEqualityComparer<UserData> 
{ 
    public bool Equals(UserData x, UserData y) 
    { 
     return x.LoginId == y.LoginId; 
    } 

    public int GetHashCode(UserData obj) 
    { 
     return obj.LoginId.GetHashCode(); 
    } 
} 
+1

Distinct()是这样工作吗?它会使用哪个EqualityComparer? – dotNET

+0

是的,你是对的。我编辑了我的答案,效果很好。 –

+0

这是无稽之谈。你正在修复一个不存在的问题。如果输入列表是唯一的,那么'join'不可能奇迹般地产生重复。 OP代码中还有其他问题。 – BartoszKP

相关问题