c# - 如何从复杂的 SQL 创建 LINQ?
问题描述
我有这个 SQL 查询:
SELECT D.ID
FROM Documents AS D
INNER JOIN DocClasses AS DC WITH (NOLOCK)
ON D.DocClass = DC.ID
INNER JOIN DocSubClasses AS DSC WITH (NOLOCK)
ON D.DocSubClass = DSC.ID AND DSC.DocClassID = DC.ID
INNER JOIN DocPathFolders AS F WITH (NOLOCK)
ON D.DocPathFolderID = F.ID
WHERE
DC.ShortName = 'PAY' AND DSC.Name = 'xxxxx'
AND UPPER(F.Description) = 'READY TO SEND'
我正在尝试将此查询转换为 LINQ。这是我到目前为止所做的:
from D in ctx.Documents
join DC in ctx.DocClasses on D.DocClass equals DC.ID
join DSC in ctx.DocSubClasses
on new { D.DocSubClass, DSC.DocClassID } equals new { DSC.ID, DC.ID }
join F in ctx.DocPathFolders
on D.DocPathFolderID equals F.ID
where
DC.ShortName == "PAY"
&& DSC.Name == "xxxxx"
&& (F.Description).ToUpper() == "READY TO SEND"
select D.ID;
我在这一行遇到错误:
join DSC in ctx.DocSubClasses on new { D.DocSubClass, DSC.DocClassID } equals new { DSC.ID, DC.ID }
在这里,我收到以下错误:
名称“DSC”不在“等于”左侧的范围内
名称“DC”不在“等于”右侧的范围内
我是 LINQ 的新手,这就是我无法解决这些错误的原因。我会对上述内容提出任何建议。谢谢。
解决方案
您应该像这样重新排列匿名对象中的属性:
join DSC in ctx.DocSubClasses
on new { D.DocSubClass, DC.ID } equals new { DSC.DocClassID, DSC.ID }
右边的应该是你要加入的表(DSC
),左边的可以是以前的表
推荐阅读
- bash - 在文件中查找空行和包含一列的行
- r - ggplot2 R中堆叠条的移动位置更靠近y轴
- passport.js - 我使用护照和 oauth2 的身份验证无法重定向到我的仪表板页面
- php - 从 HTML 行中提取键
- django - Django - 重定向到后页后,无法保留在分配给 LOGIN_REDIRECT_URL 的视图中。我正在使用自定义 AUTH_USER_MODEL
- android - msal+oauth - 如何从 android/flutter 检索刷新令牌
- python - 使用 Python 将 Bigquery 上传到 S3 文件:raise ValueError('Filename must be a string')
- json - 如何使用 vuejs 访问 json 中的“download_url”
- jenkins-pipeline - 如何在脚本化管道中的 Jenkinsfile 中引用本地 Dockerfile.build 文件
- python - Conda - VS 代码:ModuleNotFoundError:没有名为“geopandas”的模块