2011-07-08 32 views
9

Tôi đã làm việc với phương pháp đầu tiên bên dưới, nhưng sau đó tôi đã tìm thấy phương pháp thứ hai và muốn biết sự khác biệt và điều tốt nhất.Cách tốt nhất để tham gia vào Linq

là gì sự khác biệt giữa:

from a in this.dataContext.reglements 
join b in this.dataContext.Clients on a.Id_client equals b.Id 
select... 

from a in this.dataContext.reglements 
from b in this.dataContext.Clients 
where a.Id_client == b.Id 
select... 

Trả lời

6

Tôi tạo ra một trường hợp thử nghiệm để kiểm tra sự khác biệt, và trong scenerio bạn nó quay ra họ đều giống nhau.

dụ thử nghiệm của tôi sử dụng AdventureWorks nhưng về cơ bản có một mối liên hệ giữa

Sản phẩm-> CategoryId-> Danh mục

var q = (
    from p in Products 
    from c in Categories 
     where p.CategoryID==c.CategoryID 
    select p 
); 

q.ToList(); 

Tạo SQL này:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID] 
    FROM [Products] AS [t0], [Categories] AS [t1] 
WHERE [t0].[CategoryID] = ([t1].[CategoryID]) 

var q2 = (
    from p in Products 
    join c in Categories 
     on p.CategoryID equals c.CategoryID 
    select p); 

q2.ToList(); 

Tạo sql này:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[CategoryID] 
FROM [Products] AS [t0] 
INNER JOIN [Categories] AS [t1] ON [t0].[CategoryID] = ([t1].[CategoryID]) 
+0

Tôi sử dụng LinqToSQL – Akrem

+0

Không phải bản dịch thứ hai sẽ tham gia kiểu ANSI? Tại sao nó sẽ được thực hiện trong bộ nhớ? Đó cũng là SQL hợp lệ, phải không? –

+0

Bạn có chắc chắn điều này? Không có lý do cụ thể nào mà L2S không thể tạo ra một mệnh đề 'FROM' nhiều phần trong SQL. –

2

Sự khác biệt giữa hai cú pháp này sẽ nằm trong cách mà họ được quy đổi sang SQL. Bạn có thể theo dõi Entity Framework hoặc LINQ to SQL để xác định SQL:

LINQ to SQL: http://www.reflectionit.nl/Blog/PermaLinkcba15978-c792-44c9-aff2-26dbcc0da81e.aspx

Kiểm tra SQL kết quả để xác định xem có bất kỳ sự khác biệt mà có thể ảnh hưởng đến hiệu suất.

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