2012-12-18 46 views
5

Tôi đã kiểm soát một số mã khung thực thể và đang tìm cách cấu trúc lại nó. Trước khi tôi làm, tôi muốn kiểm tra suy nghĩ của mình là chính xác và tôi không bỏ lỡ cách thực hiện khuôn khổ thực thể.Tái cấu trúc lớp dữ liệu

Ví dụ 1 - Subquery vs Tham

Ở đây chúng ta có một one-to-many giữa A và B. Ngoài các mã dưới đây là khó đọc, nó cũng không hiệu quả?

from a in dataContext.As 
where ((from b in dataContext.Bs 
     where b.Text.StartsWith(searchText) 
     select b.AId).Distinct()).Contains(a.Id) 
select a 

Sẽ tốt hơn, ví dụ: sử dụng tham gia và làm điều gì đó như thế này?

from a in dataContext.As 
where a.Bs.Any(b => b.Text.StartsWith(searchText)) 
select a 

Ví dụ 2 - Explicit tham gia vs Navigation

Ở đây chúng ta có một one-to-many giữa A và B và một one-to-many giữa Bs và Cs.

from a in dataContext.As 
join b in dataContext.Bs on b.AId equals a.Id 
join c in dataContext.Cs on c.BId equals b.Id 
where c.SomeValue equals searchValue 
select a 

Có lý do chính đáng để sử dụng kết nối rõ ràng thay vì điều hướng qua mô hình dữ liệu không? Ví dụ:

from a in dataContext.As 
where a.Bs.Any(b => b.Cs.Any(c => c.SomeValue == searchValue) 
select a 

Trả lời

0

Đôi khi cần sử dụng kiểu nối và truy vấn con để kiểm soát các khía cạnh nhất định của truy vấn LINQ 2 SQL. Đây không phải là trường hợp ở đây. Phong cách "điều hướng" hoàn toàn thích hợp hơn. Đôi khi, nó thậm chí còn đi kèm với lợi ích hiệu suất vì LINQ to SQL sử dụng các mẫu SQL thông minh hơn.

Tôi không chỉ muốn trả lời bằng "bạn nói đúng" vì vậy hãy để tôi nói rằng tôi có rất nhiều kinh nghiệm với LINQ to SQL. Tôi đang sử dụng nó trên hai dự án lớn hơn, nơi hiệu suất là rất quan trọng và hầu như mọi câu lệnh SQL được tạo ra đều được tôi thử nghiệm hoàn hảo. Vì vậy, câu trả lời này mang một số thẩm quyền và không chỉ là một ý kiến ​​internet ngẫu nhiên.

+0

Cảm ơn bạn đã dành thời gian trả lời. – Joey

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