0

個別の列値を取得するための最も効率的な方法は何ですか。フィールドFormsIDProductLineDescription他の列を含むテーブルがあります。ProductLineテーブルには1対多の関係があり、テーブルのサンプルデータは次のようになります。

FormID ProdculineDesc
1      abc
2      abc
1      xyz
2      def
3      abc
3      xyz

ドロップダウンに。の個別の値だけを含める必要がありますProductLineDesc。これがコードです、

private void LoadProductLines(Models.SearchModel Model, xyzEntities Context)
{
    Model.ProductLine = Context.PRODUCTLINEs
        .OrderBy(T => T.FormsGuid).ToSelectList().Distinct();
}

これはまだ私にすべてを与えますProductLineDesc、どうすればDistinct値だけを取得できますか。

4

2 に答える 2

0

これは、カスタムの品質比較機能を備えたバージョンです ( exampleを使用):

public class UniqueProductLineDesc : IEqualityComparer<Product>
{
    public Boolean Equals(Product a, Product b)
    {
        if (Object.ReferenceEquals(a, b))
            return true;

        if (Object.ReferenceEquals(a, null) || Object.ReferenceEquals(b, null))
            return false;

        return String.Compare(a.ProductLineDesc, b.ProductLineDesc, true) == 0;
    }

    public Int32 GetHashCode(Product product)
    {
        if (Object.ReferenceEquals(product, null))
            return 0;

        return product.ProductLineDesc == null ? 0 : product.ProductLineDesc.GetHashCode();
    }
}

そして実装するには:

private void LoadProductLines(Models.SearchModel Model, xyzEntities Context)
{
    Model.ProductLine = Context.PRODUCTLINEs
        .OrderBy(T => T.FormsGuid)
        .ToSelectList()
        .Distinct(new UniqueProductLineDesc());
}
于 2012-04-27T15:29:15.823 に答える
0

次のようなものはどうですか:

var distinctInfo = (from c in Context.PRODUCTLINEs
                           group by c.ProductLineDesc into result
    select new Model.ProductLine {
    ProductLineDesc = result.Key,
    FormID = result.Min(d=>d.FormID)
    });
于 2012-04-27T17:55:05.947 に答える