13

linq を使用してリストからアイテムを削除する方法 ?.

アイテムのリストがあり、各アイテム自体に他のアイテムのリストがあり、他のアイテムに渡されたリストのアイテムが含まれているかどうかを確認したいので、メインアイテムを削除する必要があります。より明確にするためにコードを確認してください。

public Class BaseItems
{
    public int ID { get; set; }
    public List<IAppointment> Appointmerts { get; set; }
}

Public DeleteApp(List<IAppointment> appointmentsToCheck)
{
   List<BaseItems> _lstBase ; // is having list of appointments

   //now I want to remove all items from _lstBase  which _lstBase.Appointmerts contains 
   any item of appointmentsToCheck (appointmentsToCheck item and BaseItems.Appointmerts 
   item is having a same reference)

   //_lstBase.RemoveAll(a => a.Appointmerts.Contains( //any item from appointmentsToCheck));

}
4

3 に答える 3

22
_lstBase
    .RemoveAll(a => a.Appointmerts.Any(item => appointmentsToCheck.Contains(item)));
于 2012-10-19T13:29:54.653 に答える
7

指摘しておくと、LINQ はデータのクエリを行うためのものであり、元のコンテナーから要素を実際に削除することはありません。最後に使用する必要があります_lstBase.Remove(item)。できることは、LINQ を使用してそれらの項目を見つけることです。

ある種の INotify パターンを使用しており_lstBase、それ自体のフィルター処理されたバージョンに置き換えるためにパターンが壊れていると想定しています。を置き換えることができる場合は_lstBase、@ JanP.の回答を使用してください。

List<BaseItems> _lstBase ; // populated original list

Public DeleteApp(List<IAppointment> appointmentsToCheck)
{
  // Find the base objects to remove
  var toRemove = _lstBase.Where(bi => bi.Appointments.Any
                (app => appointmentsToCheck.Contains(app)));
  // Remove em! 
  foreach (var bi in toRemove)
    _lstBase.Remove(bi);
}
于 2012-10-19T14:10:45.553 に答える
3
var data = 
   _lstBase.
    Except(a => a.Appointmerts.Any
        (item => appointmentsToCheck.Contains(item)));

また

var data = 
   _lstBase.
    Where(a => !a.Appointmerts.Any
        (item => appointmentsToCheck.Contains(item)));
于 2012-10-19T13:32:03.670 に答える