0

以下のデータをドロップダウンにバインドしていますが、明確な値を取得できません。助けてください。以下のコードスニペットを見つけてください

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

1 に答える 1

2

Distinct()Equals(object obj)の定義済みメソッドを使用していDropDownItemます。適切なものを定義し、IEqualityComparerそれをメソッドに渡して、ネイティブメソッドを使用しないようDistinct(IEqualityComparer<T>)に指示する必要がありますが、独自のイコライゼーションを使用する必要があります。DistinctEquals(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());
于 2012-10-12T12:34:44.400 に答える