1

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

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

この場合、customerID はドロップダウンリストから取得した値です。ただし、同じ行が 2 回表示されます。では、個別のレコードのみを表示する方法を教えてください。

4

3 に答える 3

3

最も可能性の高い理由は、既定でパラメーターなしで呼び出された場合、Distinct がすべてのパブリック プロパティを比較して等しいことです。あなたのIDは一意になると思います。したがって、Distinct は機能しません。

次のようなものを試すことができます

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

私はこれを答えとして見つけました

  1. Lambda または LINQ でリストから個別のインスタンスを取得する方法
  2. Distinct() とラムダ?
于 2012-05-07T03:51:59.757 に答える
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 だけでなく、匿名型のすべてのプロパティを比較することに注意してください。

于 2012-05-07T03:48:25.370 に答える
1

LINQ Select Distinct with Anonymous Typesをご覧ください

r.ID は同じ 2 つの製品間で異なると思いますが、Products_Id は同じですか?

于 2012-05-07T03:48:33.433 に答える