检索不同的字段值

时间:2012-04-27 15:03:20

标签: asp.net-mvc linq entity-framework

检索不同列值的最有效方法是什么。我有一个包含字段FormsIDProductLineDescription以及其他列的表格。 ProductLine表具有一对多关系,表中的示例数据如下:

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值。

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分: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)
    });
相关问题