2012-10-19 42 views
13

Cách xóa mục khỏi danh sách bằng linq?.Xóa mục khỏi danh sách bằng linq

Tôi có một danh sách các mục và mỗi mục nó tự có một danh sách các mục khác bây giờ tôi muốn chaeck nếu các mục khác chứa bất kỳ mục nào trong danh sách được chuyển vì vậy mục chính nên được loại bỏ. Vui lòng kiểm tra mã để biết rõ hơn.

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

} 

Trả lời

21
_lstBase 
    .RemoveAll(a => a.Appointmerts.Any(item => appointmentsToCheck.Contains(item))); 
3
var data = 
    _lstBase. 
    Except(a => a.Appointmerts.Any 
     (item => appointmentsToCheck.Contains(item))); 

hoặc

var data = 
    _lstBase. 
    Where(a => !a.Appointmerts.Any 
     (item => appointmentsToCheck.Contains(item))); 
7

Chỉ cần chỉ ra, LINQ là để truy vấn dữ liệu và bạn sẽ không thực sự loại bỏ các phần tử từ container gốc. Bạn sẽ phải sử dụng _lstBase.Remove(item) cuối cùng. Những gì bạn có thể làm là sử dụng LINQ để tìm những mục đó.

Tôi giả định rằng bạn đang sử dụng một số loại mẫu Inotify mà nó là mẫu vỡ để thay thế _lstBase bằng phiên bản được lọc của chính nó. Nếu bạn có thể thay thế _lstBase, hãy truy cập bằng câu trả lời của @ 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); 
} 
Các vấn đề liên quan