2013-05-19 39 views
-1

我有一個包含銷售人員團隊詳細信息的對象列表。 該名單中有幾個名稱相同但推銷員不同的團隊。不要將重複的項目綁定到選中的列表框

的teamDetails類具有以下屬性:

string teamName; 
string region; 
int teamSales; 
string salesmanFullName; 
string salesmanAddress; 

用戶有一個選項可以找到所有有銷售超過一定值的團隊。這些團隊將被添加到複選框列表中。

這是如何我填充複選框列表:

var viewList = from toSearch in GlobalVariables.allSalesmenList 
       where toSearch.teamSales > Convert.ToInt32(txtSalesSearch.Text) 
       select toSearch; 
SearchCheckedListBox.DataSource = viewList.ToList(); 
SearchCheckedListBox.DisplayMember = "teamName"; 

我遇到的問題是球隊名稱顯示超過一次,如果團隊擁有超過一個推銷員。

我將如何防止複選框重複值?

+0

我不太清楚你想在這裏做什麼? –

+0

複選框有重複的值,我不想要這個。例如,如果「團隊1」有5個成員,則複選框列表將顯示5個「團隊1」。 – Pindo

+0

你使用了viewList.ToList.Distinct(); – Saravanan

回答

1

嘗試使用不同的用比較器:

var viewList = from toSearch in GlobalVariables.allSalesmenList 
      where toSearch.teamSales > Convert.ToInt32(txtSalesSearch.Text) 
      select toSearch; 


SearchCheckedListBox.DataSource = viewList.Distinct(new TeamComparer()).ToList(); 
SearchCheckedListBox.DisplayMember = "teamName"; 

的Comparer代碼:

public class TeamComparer : IEqualityComparer<teamDetails> 
    { 
     public bool Equals(teamDetails x, teamDetails y) 
     { 
      if (x.teamName == y.teamName) return true; 

      return false; 
     } 

     public int GetHashCode(teamDetails obj) 
     { 
      if (Object.ReferenceEquals(obj, null)) return 0; 

      return obj.teamName.GetHashCode(); 
     } 
    } 
1

您可以簡單地使用這個

SearchCheckedListBox.DataSource = viewList.GroupBy(x => x.teamName) 
              .Select(g => g.First()) 
              .ToList(); 

如果刨使用同樣的伎倆更比一次,你可以寫一個擴展方法

public static IEnumerable<T> DistinctBy<T, S>(this IEnumerable<T> list, Func<T, S> selector) 
{ 
    return list.GroupBy(selector).Select(g => g.First()); 
} 

那麼代碼將

SearchCheckedListBox.DataSource = viewList.DistinctBy(x => x.teamName).ToList(); 
相關問題