tham khảo Khi sử dụng cơ sở dữ liệu AdventureWorks và phát hành truy vấn này:Tại sao EF tạo sql này khi truy vấn bất động sản
AdventureWorksEntities entities = new AdventureWorksEntities();
entities.Contacts.Where(x => x.FirstName == "A"
|| x.FirstName == "B"
|| x.FirstName == "C")
.ToList();
sẽ được dịch sang sql này, đó là tốt nhất có thể:
Tuy nhiên, khi tôi đưa ra truy vấn này:
entities.Employee.Where(x => x.Contact.FirstName == "A"
|| x.Contact.FirstName == "B"
|| x.Contact.FirstName == "C")
.ToList();
Tôi nhận được SQL này:
//ommited for brevity
FROM [HumanResources].[Employee] AS [Extent1]
INNER JOIN [Person].[Contact] AS [Extent2] ON [Extent1].[ContactID] = [Extent2].[ContactID]
LEFT OUTER JOIN [Person].[Contact] AS [Extent3] ON [Extent1].[ContactID] = [Extent3].[ContactID]
WHERE [Extent2].[FirstName] = N'A' OR [Extent3].[FirstName] IN (N'B',N'C')
Tại sao tôi nhận được sự tham gia bên trong và bên ngoài và EF tách vị trí của cả hai?
Trong Lưu ý sử dụng chứa tạo ra SQL giống nhau:
var names = new List<string>{"A", "B", "C"};
entities.Employee.Where(x => names.Contains(x.Contact.FirstName)).ToList();
EDIT: Vì vậy, nó dường như là một lỗi EF, tôi đã chấp nhận câu trả lời mà cung cấp một công việc xung quanh
EDIT: Khai trương kết nối vấn đề, nó nằm ở here
Làm việc tốt xung quanh :) – BennyM