1

私はオブジェクトを持っています

   public class OrderItem
   {
      public string idProduct { get; set; }
      public int quantity { get; set; }
      public List<WarehouseItem> WarehouseInfo = new List<WarehouseItem>();
   }

   public class WarehouseItem
   {
       public string Name{ get; set; }
       public string LocnCode{ get; set; }
   }

そして、WarehouseInfo.LocnCode=="A1"を持つアイテムを選択する必要があります

こんなもの使ったら動かない

var items = itemList.Where(x => x.WarehouseInfo.Where(y => y.LocnCode.Equals("A1")));
4

2 に答える 2

3

要件は3つの方法のいずれかで解釈される可能性があるため、次の3つの解決策があります。

  1. いずれかが持っているすべてのOrderItems場所を教えてください:WarehouseItemLocnCode"A1"

    var items = itemList.Where(i => i.WarehouseInfo.Any(w => w.LocnCode  == "A1"));
    
  2. WarehouseItemの内にあるすべてのsをOrderItem教えてください:LocnCode"A1"

    var items = itemList.SelectMany(i => i.WarehouseInfo)
                        .Where(w => w.LocnCode.Equals("A1"));
    
  3. OrderItemsANYWarehouseItemがのLocnCodeを持っているところをすべて教えてください。そしてそれらだけ"A1"にフィルターをかけます:WarehouseInfoWarehouseItem

既存のオブジェクトの内容を変更する方法がないため、これは単純なLinqクエリでは実行できません。フィルタされた値を使用して新しいオブジェクトを作成する必要があります。

    var items = itemList.Where(i => i.WarehouseInfo.Any(w => w.LocnCode  == "A1"))
                        .Select(i => new OrderItem
                                     {
                                         idProduct     = i.idProduct, 
                                         quantity      = i.quantity,
                                         WarehouseInfo = i.WarehouseInfo.Where(w => w.LocnCode.Equals("A1"));
                                                                        .ToList()
                                     }
                               );
于 2013-03-25T18:53:25.520 に答える
0

試す

var items = itemList.Where(x => x.WarehouseInfo.Any(y => y.LocnCode.Equals("A1")));

Where、を返す必要がある述語を取りますboolAnyコレクション内の少なくとも1つの項目が指定された述語に対してtrueを返す場合、trueを返します。

于 2013-03-25T18:41:03.857 に答える