2012-01-04 42 views
0

低優先級的問題,因爲我已經有一個解決方案,但我認爲有一個更好的方法。我試圖返回一個結果就這樣SQL查詢:LINQ to Entities LEFT JOIN單個聚合結果

SELECT COUNT(*) IsAuthenticated, COUNT(UTP.HashedPassword) IsTempPassword 
FROM [EnterpriseDB].[dbo].[UniversalCurrentPassword] AS UCP 
LEFT JOIN [EnterpriseDB].[dbo].[UniversalTempPassword] AS UTP 
ON UCP.UniversalId = UTP.UniversalId 
WHERE UCP.UniversalId = 00000 
     AND (UCP.HashedPassword = 'some_password' 
      OR UTP.HashedPassword = 'some_password') 

以下是我已經:

//returns null if mismatch 
//returns true if temp password 
//returns false if current password 
bool? query = 
    (from Password in context.UniversalCurrentPasswords 
    join TempPassword in context.UniversalTempPasswords 
    on Password.UniversalId equals TempPassword.UniversalId 
    where Password.UniversalId == longId 
    && (Password.HashedPassword == pwd 
     || Password.UniversalMaster.UniversalTempPassword.HashedPassword == pwd) 
    select (TempPassword.HashedPassword == null ? true : false)).FirstOrDefault(); 

你認爲什麼 - 有沒有更好的辦法?

+2

在SELECT子句類型條件表達式是布爾,不是bool的?和布爾默認是假的,所以如果你有任何記錄,則'query'變量將是虛假的;它永遠不能爲空。 – phoog 2012-01-04 18:05:59

回答

0

試試這個:

​​