2012-05-07 11 views
0

私は顧客のために製品のリストを表示する状況があります。したがって、2種類の製品があります。したがって、顧客が2つの製品に登録されている場合、両方の製品が表示されます。したがって、私は別個の行を表示する必要があります。私はこれを行いました:LINQ内の別個の要素

var queryProducts = DbContext.CustomerProducts.Where(p => p.Customers_Id == 
              customerID).ToList().Select(r => new 
          { 
           r.Id, 
           r.Products_Id, 
           ProductName = r.Product.Name, 
           ShortName = r.Product.ShortName, 
           Description = r.Product.Description, 
           IsActive = r.Product.IsActive 

          }).Distinct(); 

ここで、私はdropdownlistから得た値です。ただし、同じ行が2回表示されます。だから、別のレコードだけをどのように表示することができるか教えてください。

+0

への回答として、これを見つけた

myCustomerList.GroupBy(product => product.Products_Id).Select(grp => grp.First());

ような何かを試すことができます? – Ramesh

答えて

2

最も一般的な理由は、パラメータが指定されていない状態で呼び出されたときにDistinctが指定されていると、すべてのパブリックプロパティが等しいかどうかが比較されます。私はあなたのIDが一意になると思う。したがって、Distinctはあなたのために働いていません。

あなたは私はあなたが個別に基づいて行動したいプロパティで

  1. How to get distinct instance from a list by Lambda or LINQ
  2. Distinct() with lambda?
1

IEqualityComparer<CustomerProduct>の実装を記述できます。あなたのために良い仕事かもしれない、この匿名の比較子を使用して、

DbContext.CustomerProducts.Where(p => p.Customers_Id == customerId) 
    .ToList() 
    .Distinct(new MyComparer()) 
    .Select(r => new { 
    // etc. 

public class MyComparer : IEqualityComparer<CustomerProduct> 
{ 
    // implement **Equals** and **GetHashCode** here 
} 

注意を、それがに指定されているだけでなく、顧客ID、匿名型内のすべてのプロパティを比較します。あなたはそれを持ったら、あなたはこれを使用することができます質問。

+0

これは@dbasemanという別のメソッドを使用せずに無名関数として行うことができますか? – dumbledad

+1

@dumbledadありません:(。私は匿名関数を使用してインラインで行う方法はわかりません。http://stackoverflow.com/q/191013/1001985 – McGarnagle

1

は、私はr.IDが同じである二つの製品間で変化している推測しているLINQ Select Distinct with Anonymous Types

を見てください、しかし、あなたは同じProducts_Idがありますか?

関連する問題