0

I have to make a SELECT over a handful of entities (tables) which needs a lot of JOINs.

When I write that query in SQL Server Management Studio, it works, but in my C# code with LINQ, I get no matches.

Here are a few examples:

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

Matches: 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>();

Matches: 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

Matches: 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>();

Matches: 142

It seems that I have a problem with the columns from the entity CustomListItem in the WHERE clause.

But I don't understand why.

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Patrick Pirzer
  • 1,649
  • 3
  • 22
  • 49

1 Answers1

0

Thanks to JamieD77 i have found my mistake. The LINQ-SQL is correct but i in my C#-code i swapped two parameters.

Patrick Pirzer
  • 1,649
  • 3
  • 22
  • 49