przypadku korzystania z bazy danych AdventureWorks i wydawania tej kwerendy:Dlaczego EF wygenerowania tego sql podczas odpytywania właściwość odniesienia
AdventureWorksEntities entities = new AdventureWorksEntities();
entities.Contacts.Where(x => x.FirstName == "A"
|| x.FirstName == "B"
|| x.FirstName == "C")
.ToList();
będą tłumaczone na tym SQL, który jest najlepszy to może:
jednak kiedy wydaj zapytanie:
entities.Employee.Where(x => x.Contact.FirstName == "A"
|| x.Contact.FirstName == "B"
|| x.Contact.FirstName == "C")
.ToList();
otrzymuję ten SQL:
//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')
Dlaczego otrzymuję sprzężenie wewnętrzne i zewnętrzne, a EF dzieli je na oba?
nuty używając zawiera tworzy ten sam SQL:
var names = new List<string>{"A", "B", "C"};
entities.Employee.Where(x => names.Contains(x.Contact.FirstName)).ToList();
EDIT: A więc wydaje się być błąd EF, jakie przyjął odpowiedź, która dostarczyła obejść
EDIT: Otwarty połączyć wydanie, znajduje się here
Dobra robota :) – BennyM