2012-04-27 74 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) 
    });