2012-04-27 72 views
0

什么是检索不同的列值的最有效方式。我有一个表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值。

+0

你可以' .GroupBy'并使用'ProductLineDesc'作为分组列或在该列上执行'.Select',然后使用'.D istinct'。您也可以创建自己的['IEqualityComparer '](http://msdn.microsoft.com/en-us/library/ms132151.aspx)并保持原样。 – 2012-04-27 15:09:12

回答

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()); 
} 
+0

有没有更简单的方法?我确信这会起作用,但是有没有更简单的方法,只要提一下我想要独特的领域的独特之处? – sansid 2012-04-27 16:51:51

+0

添加一个类来做独立检查不是_simple_? – 2012-04-27 16:57:54

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) 
    });