检索不同列值的最有效方法是什么。我有一个包含字段FormsID
和ProductLineDescription
以及其他列的表格。 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
值。
答案 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)
});