2012-10-12 134 views
0

我將下面的數據綁定到一個下拉列表,但無法獲得disctinct值。請幫忙。發現下面在linq mvc3中選擇不同的值

var SalesOrgTypes = (from s in tblSales 
         orderby s.SalesOrg ascending 
         select new DropDownItem 
         { 
          Value = s.SalesOrg, 
          Text = s.SalesOrg + " - " + s.SalesOrgDesc 
         }).Distinct(); 
+3

你還沒說什麼是實際發生的事情... –

回答

2

Distinct()代碼段使用DropDownItem的definied Equals(object obj)方法。您必須定義一個適當的IEqualityComparer並將其提供給Distinct(IEqualityComparer<T>)方法,以告知Distinct不要使用本機Equals(object obj)方法,而是使用您自己的均衡。

class DropDownItemEqualityComparer : IEqualityComparer<DropDownItem> 
{ 
    #region IEqualityComparer<DropDownItem> Member 

    public bool Equals(DropDownItem x, DropDownItem y) 
    { 
     return 
      x == null || y == null 
      ? false 
      : x.Value == y.Value && x.Text == y.Text; 
     //Or whatever properties you want to be equal 
    } 

    public int GetHashCode(DropDownItem obj) 
    { 
     if (obj != null) 
      return 
       obj.Value.GetHashCode() + obj.Text.GetHashCode(); 
     else 
      throw new ArgumentNullException("obj"); 
    } 

    #endregion 
} 

然後你就可以到Distinct方法

var SalesOrgTypes = (from s in tblSales 
         orderby s.SalesOrg ascending 
         select new DropDownItem 
         { 
          Value = s.SalesOrg, 
          Text = s.SalesOrg + " - " + s.SalesOrgDesc 
         }).Distinct(new DropDownItemEqualityComparer()); 
+0

謝謝@Jan P.這是工作給這個。 –