Câu trả lời ngắn:
Xóa (khỏi danh sách results
)
results.RemoveAll(r => r.ID == 2);
sẽ xóa mục có ID 2 tại chỗ results
(tại chỗ).
Bộ lọc (không xóa khỏi danh sách gốc results
):
var filtered = result.Where(f => f.ID != 2);
trả về tất cả các mục ngoại trừ mục có ID 2
Câu trả lời chi tiết:
Tôi nghĩ .RemoveAll()
là rất linh hoạt, bởi vì bạn có thể có một danh sách ID vật phẩm mà bạn muốn xóa - vui lòng xem ví dụ sau.
Nếu bạn có:
class myClass {
public int ID; public string FirstName; public string LastName;
}
và gán một số giá trị results
như sau:
var results=new List<myClass> {
new myClass() { ID=1, FirstName="Bill", LastName="Smith" },
new myClass() { ID=2, FirstName="John", LastName="Wilson" },
new myClass() { ID=3, FirstName="Doug", LastName="Berg" },
new myClass() { ID=4, FirstName="Bill", LastName="Wilson" },
};
Sau đó, bạn có thể xác định danh sách ID cần xóa:
var removeList = new List<int>() { 2, 3 };
Và chỉ cần sử dụng điều này để loại bỏ chúng:
results.RemoveAll(r => removeList.Any(a => a==r.ID));
Nó sẽ xóa các mục 2 và 3 và giữ các mục 1 và 4 - theo quy định củaremoveList
. Lưu ý rằng điều này xảy ra tại chỗ, do đó không có yêu cầu bổ sung.
Tất nhiên, bạn cũng có thể sử dụng nó trên các mục đơn lẻ như:
results.RemoveAll(r => r.ID==4);
nơi nó sẽ loại bỏ Bill với ID 4 trong ví dụ của chúng tôi.
DotNetFiddle: Chạy bản demo
var itemsToRemove = resultlist.Where(r => r.Id == 2); foreach (var itemToRemove in ItemsToRemove) resultList.Remove(itemToRemove);