Quando si utilizza il database AdventureWorks e il rilascio questa query:Perché EF generare questo SQL per le query di proprietà di riferimento
AdventureWorksEntities entities = new AdventureWorksEntities();
entities.Contacts.Where(x => x.FirstName == "A"
|| x.FirstName == "B"
|| x.FirstName == "C")
.ToList();
sarà tradotto a questo SQL, che è il meglio che può:
Tuttavia quando ho emettere questo query:
entities.Employee.Where(x => x.Contact.FirstName == "A"
|| x.Contact.FirstName == "B"
|| x.Contact.FirstName == "C")
.ToList();
ottengo questo 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')
Perché sto ottenendo un join interno ed esterno ed è EF che divide il punto in cui si trovano entrambi?
di nota utilizzando contiene crea lo stesso SQL:
var names = new List<string>{"A", "B", "C"};
entities.Employee.Where(x => names.Contains(x.Contact.FirstName)).ToList();
EDIT: Così sembra essere un bug EF, ho accettato la risposta che ha fornito un lavoro in giro
EDIT: Inaugurato il collegamento problema, si trova here
Bel lavoro intorno :) – BennyM