2014-01-12 58 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

相關問題