2012-01-23 43 views
6

Tôi có hai mảng idxListResponse & _index cả hai đều có cấu trúc giống nhau.C# linq - lấy các phần tử từ mảng không tồn tại trong một mảng khác nhau

Mỗi mảng chứa một số yếu tố có đặc tính khác nhau một trong số đó là một mảng con gọi indexdata

Mỗi phần tử của mảng này có một số đặc tính một trong số đó là một mảng gọi DataField. Điều này có một số thuộc tính cặp giá trị khóa.

Vì vậy, về bản chất, tôi có một hệ thống phân cấp gồm 3 mảng riêng biệt.

Tôi đang tìm cách có cấp thứ bậc của hệ thống phân cấp + tất cả các yếu tố của cấp độ 2 nơi các mục cấp 3 không khớp, tức là chỉ loại trừ các mục từ cấp độ 2 trong đó các mục cấp 3 là đối sánh .

Tôi đã thử tiếp cận một số cách khác nhau nhưng cho đến nay tôi không nhận được bất kỳ đâu, bất kỳ ai cũng có thể trợ giúp.

FYI - đây là nỗ lực mới nhất của tôi

var q = idxListResponse.Index.Where(a => 
    a.IndexData.All(b => 
     b.DataField.All(c => 
      _index.Index.Where(z => 
       z.IndexData.All(y => y.DataField.Contains(c.name)) 
      ) 
     ) 
    ) 
); 

Trả lời

23

Except là một cách tốt để làm điều đó:

var items = source1.Except(source2); 

sẽ trả lại tất cả các mục trong source1trừ những người trong source2.

Kể từ bộ sưu tập của bạn dường như các loại khác nhau, bạn sẽ làm điều gì đó như:

source1.Except(source2.Select(s => /* selector here */)) 

Hoặc bạn có thể tạo triển khai thực hiện của riêng bạn IEqualityComparer và sử dụng để so sánh hai loại khác nhau.

+0

cảm ơn nhưng không thể làm việc đó. Vấn đề là nếu 1 trong số các thuộc tính của một phần tử trong mảng thứ 3 phù hợp thì dường như sẽ bị loại bỏ. Tôi cần tất cả các thuộc tính cho mỗi phần tử trong mảng thứ ba để khớp với một mục tương ứng trước khi nó có thể được loại bỏ – Johnv2020

Các vấn đề liên quan