2016-10-31 38 views
0

我正在開發一個ASP.NET應用程序,其中包含兩個選擇字段的頁面。 一個用於搜索所選人員的所有人員,另一個用於搜索具有給定姓名的人員(或其中一部分人員用LIKE)。 對於每個選擇字段,我得到一個查詢,獲取同一個框架實體的IQueryable對象。 但是,當我嘗試將IQueryable對象及其結果與Intersect(由於AND邏輯)相結合時,只處理第一個查詢,而不處理第二個查詢。 我做錯了什麼? 也許我的查詢存在錯誤?兩個IQueryables的組合不起作用

這裏有疑問:

第一個用於搜索人員到選定的部門。

{SELECT 
    [Extent1].[PersonID] AS [PersonID], 
    CASE WHEN (([Extent1].[InstanceID] IS NOT NULL) AND ([Extent1].[InstanceID] IS NOT NULL)) THEN [Extent1].[InstanceID] ELSE 0 END AS [C1], 
    CASE WHEN (([Extent1].[bHidden] IS NOT NULL) AND ([Extent1].[bHidden] IS NOT NULL)) THEN [Extent1].[bHidden] ELSE cast(0 as bit) END AS [C2], 
    [Extent1].[txtLastName] AS [txtLastName], 
    [Extent1].[txtFirstName] AS [txtFirstName], 
    [Extent1].[txtEMail] AS [txtEMail], 
    [Extent1].[txtAlternativeEMail] AS [txtAlternativeEMail], 
    [Extent1].[txtGID] AS [txtGID], 
    [Extent1].[txtPhoneNumber] AS [txtPhoneNumber], 
    CASE WHEN (([Extent1].[iImportance] IS NOT NULL) AND ([Extent1].[iImportance] IS NOT NULL)) THEN [Extent1].[iImportance] ELSE 0 END AS [C3], 
    [Extent1].[Teamlead] AS [Teamlead] 
    FROM (SELECT 
    [Person_Teamlead].[PersonID] AS [PersonID], 
    [Person_Teamlead].[InstanceID] AS [InstanceID], 
    [Person_Teamlead].[WiW_URL_PersonID] AS [WiW_URL_PersonID], 
    [Person_Teamlead].[txtAccount] AS [txtAccount], 
    [Person_Teamlead].[txtTitle] AS [txtTitle], 
    [Person_Teamlead].[txtLastName] AS [txtLastName], 
    [Person_Teamlead].[txtFirstName] AS [txtFirstName], 
    [Person_Teamlead].[txtPhoneNumber] AS [txtPhoneNumber], 
    [Person_Teamlead].[txtEMail] AS [txtEMail], 
    [Person_Teamlead].[txtGID] AS [txtGID], 
    [Person_Teamlead].[txtDomain] AS [txtDomain], 
    [Person_Teamlead].[txtFax] AS [txtFax], 
    [Person_Teamlead].[txtMobilePhone] AS [txtMobilePhone], 
    [Person_Teamlead].[txtRoom] AS [txtRoom], 
    [Person_Teamlead].[txtAddress] AS [txtAddress], 
    [Person_Teamlead].[dtLastUpdate] AS [dtLastUpdate], 
    [Person_Teamlead].[bHidden] AS [bHidden], 
    [Person_Teamlead].[iExtern] AS [iExtern], 
    [Person_Teamlead].[txtOrganisationUnit] AS [txtOrganisationUnit], 
    [Person_Teamlead].[txtStreet] AS [txtStreet], 
    [Person_Teamlead].[txtZip] AS [txtZip], 
    [Person_Teamlead].[txtLocalityName] AS [txtLocalityName], 
    [Person_Teamlead].[txtCountry] AS [txtCountry], 
    [Person_Teamlead].[iToDelete] AS [iToDelete], 
    [Person_Teamlead].[dtToDelete] AS [dtToDelete], 
    [Person_Teamlead].[iImportance] AS [iImportance], 
    [Person_Teamlead].[iManualInput] AS [iManualInput], 
    [Person_Teamlead].[txtAlternativeEMail] AS [txtAlternativeEMail], 
    [Person_Teamlead].[Teamlead] AS [Teamlead] 
    FROM [dbo].[Person_Teamlead] AS [Person_Teamlead]) AS [Extent1] 
    WHERE (EXISTS (SELECT 
     1 AS [C1] 
     FROM [dbo].[Person_Department] AS [Extent2] 
     WHERE ([Extent2].[DepartmentID] = @p__linq__0) AND ([Extent2].[PersonID] = [Extent1].[PersonID]) 
    )) AND ([Extent1].[InstanceID] = @p__linq__1) AND (0 = [Extent1].[iToDelete]) AND ((0 = (CASE WHEN ([Extent1].[bHidden] IS NOT NULL) THEN cast(1 as bit) ELSE cast(0 as bit) END)) OR (0 = [Extent1].[bHidden]))} 

而第二個查詢是用於搜索給定的名字的人。

{SELECT 
    [Project1].[PersonID] AS [PersonID], 
    [Project1].[C1] AS [C1], 
    [Project1].[C2] AS [C2], 
    [Project1].[txtLastName] AS [txtLastName], 
    [Project1].[txtFirstName] AS [txtFirstName], 
    [Project1].[txtEMail] AS [txtEMail], 
    [Project1].[txtAlternativeEMail] AS [txtAlternativeEMail], 
    [Project1].[txtGID] AS [txtGID], 
    [Project1].[txtPhoneNumber] AS [txtPhoneNumber], 
    [Project1].[C3] AS [C3], 
    [Project1].[Teamlead] AS [Teamlead] 
    FROM (SELECT 
     [Extent1].[PersonID] AS [PersonID], 
     [Extent1].[txtLastName] AS [txtLastName], 
     [Extent1].[txtFirstName] AS [txtFirstName], 
     [Extent1].[txtPhoneNumber] AS [txtPhoneNumber], 
     [Extent1].[txtEMail] AS [txtEMail], 
     [Extent1].[txtGID] AS [txtGID], 
     [Extent1].[txtAlternativeEMail] AS [txtAlternativeEMail], 
     [Extent1].[Teamlead] AS [Teamlead], 
     CASE WHEN (([Extent1].[InstanceID] IS NOT NULL) AND ([Extent1].[InstanceID] IS NOT NULL)) THEN [Extent1].[InstanceID] ELSE 0 END AS [C1], 
     CASE WHEN (([Extent1].[bHidden] IS NOT NULL) AND ([Extent1].[bHidden] IS NOT NULL)) THEN [Extent1].[bHidden] ELSE cast(0 as bit) END AS [C2], 
     CASE WHEN (([Extent1].[iImportance] IS NOT NULL) AND ([Extent1].[iImportance] IS NOT NULL)) THEN [Extent1].[iImportance] ELSE 0 END AS [C3] 
     FROM (SELECT 
    [Person_Teamlead].[PersonID] AS [PersonID], 
    [Person_Teamlead].[InstanceID] AS [InstanceID], 
    [Person_Teamlead].[WiW_URL_PersonID] AS [WiW_URL_PersonID], 
    [Person_Teamlead].[txtAccount] AS [txtAccount], 
    [Person_Teamlead].[txtTitle] AS [txtTitle], 
    [Person_Teamlead].[txtLastName] AS [txtLastName], 
    [Person_Teamlead].[txtFirstName] AS [txtFirstName], 
    [Person_Teamlead].[txtPhoneNumber] AS [txtPhoneNumber], 
    [Person_Teamlead].[txtEMail] AS [txtEMail], 
    [Person_Teamlead].[txtGID] AS [txtGID], 
    [Person_Teamlead].[txtDomain] AS [txtDomain], 
    [Person_Teamlead].[txtFax] AS [txtFax], 
    [Person_Teamlead].[txtMobilePhone] AS [txtMobilePhone], 
    [Person_Teamlead].[txtRoom] AS [txtRoom], 
    [Person_Teamlead].[txtAddress] AS [txtAddress], 
    [Person_Teamlead].[dtLastUpdate] AS [dtLastUpdate], 
    [Person_Teamlead].[bHidden] AS [bHidden], 
    [Person_Teamlead].[iExtern] AS [iExtern], 
    [Person_Teamlead].[txtOrganisationUnit] AS [txtOrganisationUnit], 
    [Person_Teamlead].[txtStreet] AS [txtStreet], 
    [Person_Teamlead].[txtZip] AS [txtZip], 
    [Person_Teamlead].[txtLocalityName] AS [txtLocalityName], 
    [Person_Teamlead].[txtCountry] AS [txtCountry], 
    [Person_Teamlead].[iToDelete] AS [iToDelete], 
    [Person_Teamlead].[dtToDelete] AS [dtToDelete], 
    [Person_Teamlead].[iImportance] AS [iImportance], 
    [Person_Teamlead].[iManualInput] AS [iManualInput], 
    [Person_Teamlead].[txtAlternativeEMail] AS [txtAlternativeEMail], 
    [Person_Teamlead].[Teamlead] AS [Teamlead] 
    FROM [dbo].[Person_Teamlead] AS [Person_Teamlead]) AS [Extent1] 
     WHERE ([Extent1].[InstanceID] = @p__linq__0) AND (0 = [Extent1].[iToDelete]) AND ((0 = (CASE WHEN ([Extent1].[bHidden] IS NOT NULL) THEN cast(1 as bit) ELSE cast(0 as bit) END)) OR (0 = [Extent1].[bHidden])) AND ([Extent1].[txtLastName] LIKE @p__linq__1 ESCAPE N'~') 
    ) AS [Project1] 
    ORDER BY [Project1].[Teamlead] DESC, [Project1].[C3] DESC, [Project1].[txtLastName] ASC, [Project1].[txtFirstName] ASC} 

回答

0

我已經找到它了。 小原因,大成果! 我忘記將交集的結果設置爲原始查詢。 我做

query1.Intersect(query2); 

,而不是

query1 = query1.Intersect(query2); 

這就是爲什麼只是QUERY1總是執行。