2016-06-30 15 views
0

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.

+0

Verwenden Sie SQL Profiler und zeigen Sie uns eine SQL von Entity Framework generiert. – pwas

+0

Vielleicht Lazy Loading ist nicht aktiviert? – mishamosher

+4

@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 –

Antwort

0

Dank JamieD77 habe ich meinen Fehler gefunden. Der LINQ-SQL ist korrekt, aber ich habe in meinem C# -Kode zwei Parameter getauscht.