LINQ to Entities LEFT JOIN 单个聚合结果

发布于 2024-12-25 09:54:24 字数 1137 浏览 4 评论 0原文

低优先级问题,因为我已经有了解决方案,但我认为还有更好的方法。我试图返回一个结果,就像这个 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();

你认为怎么样 - 有更好的方法吗?

Low priority question as I already have a solution in place, but I think there is a better way. I am trying to return a single result just like this SQL query:

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')

Here is what I have already:

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

what do you think - is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜清冷一曲。 2025-01-01 09:54:24

试试这个:

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

try this:

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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文