簡體   English   中英

linq從對象數組中刪除item,其中property等於value

[英]linq remove item from object array where property equals value

如果我有

IEnumberable<Car> list

我想根據汽車的屬性從此列表中刪除一個項目

我想要的東西:

list.RemoveWhere(r=>r.Year > 2000)

這樣的事情存在嗎?

我一遍又一遍地這樣做,所以我想避免每次復制列表只刪除一個項目

聚會很晚,但任何人都會遇到這個問題,這是一個更清潔的解決方案:

MyList.RemoveAll( p => p.MyProperty == MyValue );

IEnumberable是不可變的,但你可以這樣做:

list = list.Where(r=>r.Year<=2000)

或寫一個擴展方法:

public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> query, Predicate<T> predicate)
{ 
    return query.Where(e => !predicate(e));
}

如果您正在使用IEnumerable<T> ,那么Where在哪里?

list = list.Where(car => car.Year <= 2000);

如果您正在使用ICollection<T>並且您不僅僅獲得過濾結果但真正打算操縱源集合,您可以為集合創建自己的定制擴展:

  public static class CollectionExtensions {
     public static ICollection<T> RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate) {
        List<T> toRemove = collection.Where(item => predicate(item)).ToList();
        toRemove.ForEach(item => collection.Remove(item));
        return collection;
     }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM