LINQ to Entities LEFT JOIN единый совокупный результат - PullRequest
0 голосов
/ 04 января 2012

Вопрос с низким приоритетом, поскольку у меня уже есть решение, но я думаю, что есть лучший способ. Я пытаюсь вернуть один результат, как этот запрос SQL:

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

как ты думаешь - есть ли лучший способ?

1 Ответ

0 голосов
/ 04 января 2012

попробуйте это:

bool? query =   
     (from Password in context.UniversalCurrentPasswords 
      join TempPassword in context.UniversalTempPasswords 
      on Password.UniversalId equals TempPassword.UniversalId into tp
      from TempPassword in tp.DefaultIfEmpty()
      where Password.UniversalId == longId 
          && (Password.HashedPassword == pwd 
          || Password.UniversalMaster.UniversalTempPassword.HashedPassword == pwd) 
      select (TempPassword == null ? null as bool? : 
              TempPassword.HashedPassword == null ? (bool?)true : (bool?)false)
     ).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...