2015-04-16 14 views
6

Tôi có một phương pháp lấy ba tham số: List<Class1> source, List<Class2) resultsDateTime endDate. Tôi có thể thấy lý do tại sao khớp nối lớp là bốn. Tuy nhiên, nó nhảy vào mười khi tôi thêm tuyên bố này:Tại sao Coupling Class nhảy khi tôi sử dụng LINQ?

var warnings = from s in source 
    join r in results on s.Field1 equals r.Field1 into joined 
    from j in joined.DefaultIfEmpty() 
    where j == null 
    select string.Format("{0}{1}", A_CONSTANT, s.Field2); 

Câu hỏi của tôi:

  1. sáu lớp nhân vật mới đã được giới thiệu bởi các tuyên bố LINQ là gì?
  2. Và vì mười là giới hạn trên của "mã tốt", điều này cho thấy LINQ không phải là một lựa chọn tốt ở đây?

Trả lời

5

Sáu lớp bổ sung có thể:

  • IEnumerable<string> - kết quả của truy vấn
  • IEnumerable<Class1> của bạn - bộ sưu tập trái
  • IEnumerable<Class2> - bộ sưu tập ngay
  • Func<Class1, int> - phần trái của biểu thức tham gia
  • .210 - phần bên phải của biểu thức tham gia
  • Func<Class1, Class2, string> - chiếu

Nó cũng có thể là nó đếm lớp Enumerable kể từ khi truy vấn được phiên dịch sang các cuộc gọi phương pháp khuyến nông tĩnh.

Trong cả hai trường hợp, phân tích mã dường như không bỏ qua các lớp tạm thời được sử dụng bởi LINQ (cho dù đó là nên hoặc không gây tranh cãi). Lời khuyên của tôi là hoặc là bỏ qua nó (có thể tự đếm các khớp nối và chú ý sự khác biệt) hoặc tìm một công cụ phân tích tốt hơn.

Một câu hỏi khác sẽ là: liệu nó có làm tăng khớp nối của bạn tổng thể? Tôi nghi ngờ rằng một số các lớp này được sử dụng trong suốt ứng dụng của bạn, vì vậy nó có thể không tạo ra sự khác biệt đáng kể về khớp nối tổng thể của bạn.

+0

Nếu công cụ của bạn bị vấp khi triển khai từ khóa thì công cụ này chưa đủ nâng cao. Phân tích phức tạp ở cấp độ này có thể được thực hiện bằng mắt, khi xem xét mã. – Gusdor

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