Ich muss eine SELECT
über eine Handvoll von Entitäten (Tabellen) machen, die eine Menge von JOINs benötigt.Ergebnis der LINQ-Abfrage ist nicht gleich dem Ergebnis einer SQL-Abfrage
Wenn ich diese Abfrage in SQL Server Management Studio schreiben, funktioniert es, aber in meinem C# -Code mit LINQ, bekomme ich keine Übereinstimmungen.
Hier sind ein paar Beispiele:
SELECT
dbo.Person.PersonID,
dbo.Person.txtFirstName,
dbo.Person.txtLastName,
dbo.Person.txtAccount
FROM
[dbo].[Person]
INNER JOIN
dbo.CustomFieldData_Person ON dbo.Person.PersonID = dbo.CustomFieldData_Person.PersonID
INNER JOIN
dbo.CustomFieldData ON dbo.CustomFieldData_Person.CustomFieldDataID = dbo.CustomFieldData.CustomFieldDataID
INNER JOIN
dbo.CustomFieldListData ON dbo.CustomFieldData.CustomFieldDataID = dbo.CustomFieldListData.CustomFieldDataID
INNER JOIN
dbo.CustomListItem ON dbo.CustomFieldListData.CustomListItemID = dbo.CustomListItem.CustomListItemID
WHERE
[dbo].[CustomListItem].[CustomListItemID] = 218
AND [dbo].[CustomListItem].[CustomListID] = 41
AND [dbo].[Person].[InstanceID] = 80
Spiele: 30
List<Person> result =
(from p in DB_Instance_Singleton.getInstance.Person
join cfdp in DB_Instance_Singleton.getInstance.CustomFieldData_Person on p.PersonID equals cfdp.PersonID
join cfd in DB_Instance_Singleton.getInstance.CustomFieldData on cfdp.CustomFieldDataID equals cfd.CustomFieldDataID
join cfld in DB_Instance_Singleton.getInstance.CustomFieldListData on cfd.CustomFieldDataID equals cfld.CustomFieldDataID
join cli in DB_Instance_Singleton.getInstance.CustomListItem on cfld.CustomListItemID equals cli.CustomListItemID
where (cli.CustomListItemID == iCustomListItemID)
&& (cli.CustomListID == iCustomListID)
&& (p.InstanceID == iInstanceID)
select p).ToList<Person>();
Spiele: 0
SELECT dbo.Person.PersonID,
dbo.Person.txtFirstName,
dbo.Person.txtLastName,
dbo.Person.txtAccount
FROM [dbo].[Person]
INNER JOIN dbo.CustomFieldData_Person ON dbo.Person.PersonID = dbo.CustomFieldData_Person.PersonID
INNER JOIN dbo.CustomFieldData ON dbo.CustomFieldData_Person.CustomFieldDataID = dbo.CustomFieldData.CustomFieldDataID
INNER JOIN dbo.CustomFieldListData ON dbo.CustomFieldData.CustomFieldDataID = dbo.CustomFieldListData.CustomFieldDataID
INNER JOIN dbo.CustomListItem ON dbo.CustomFieldListData.CustomListItemID = dbo.CustomListItem.CustomListItemID
WHERE [dbo].[Person].[InstanceID] = 80
Spiele: 142
List<Person> result =
(from p in DB_Instance_Singleton.getInstance.Person
join cfdp in DB_Instance_Singleton.getInstance.CustomFieldData_Person on p.PersonID equals cfdp.PersonID
join cfd in DB_Instance_Singleton.getInstance.CustomFieldData on cfdp.CustomFieldDataID equals cfd.CustomFieldDataID
join cfld in DB_Instance_Singleton.getInstance.CustomFieldListData on cfd.CustomFieldDataID equals cfld.CustomFieldDataID
join cli in DB_Instance_Singleton.getInstance.CustomListItem on cfld.CustomListItemID equals cli.CustomListItemID
where (p.InstanceID == iInstanceID)
select p).ToList<Person>();
Übereinstimmungen: 142
Es scheint, dass ich ein Problem mit den Spalten von der Entität CustomListItem
in der WHERE
Klausel habe.
Aber ich verstehe nicht warum.
Verwenden Sie SQL Profiler und zeigen Sie uns eine SQL von Entity Framework generiert. – pwas
Vielleicht Lazy Loading ist nicht aktiviert? – mishamosher
@nopeflow Sie können Profiler verwenden, aber EF haben bereits eine Funktion, um die endgültige Abfrage zu erhalten. http://stackoverflow.com/questions/1412863/how-do-i-view-the-sql-generated-by-the-entity-framework –