c# - 如何从复杂的 SQL 创建 LINQ?

标签 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 }

在这里,我遇到了以下错误:

The name 'DSC' is not in scope on the left side of 'equals'

The name 'DC' is not in scope on the right side of 'equals'

我是 LINQ 的新手,这就是我无法解决这些错误的原因。我会感谢以上任何建议。谢谢。

最佳答案

您应该像这样重新排列匿名对象中的属性:

join DSC in ctx.DocSubClasses 
on new { D.DocSubClass, DC.ID } equals new { DSC.DocClassID, DSC.ID }

右边的应该是你正在加入的表(DSC),左边的可以是之前的表

关于c# - 如何从复杂的 SQL 创建 LINQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175496/

相关文章:

mysql - SQL 分组依据和两列聚合

mysql - 将表连接到自身?您能否建议一个最快的查询来获取这些结果?

c# - Web API 动态 LINQ 搜索

c# - 初始化和填充新列表 <> 的更简洁方法?

c# - .NET序列化: Best practice to map classes to elements and properties to attributes?

c# - HttpHandler 重定向

mysql - OpenOffice 或 MS 97 甚至 MySQL 下满足单一标准的点击数

c# - 如何使用 LINQ 计算列表中的重复项

c# - gridview中的自定义分页

c# - 如何在 Windows Phone 8 中将 HTML_TEXT 显示为 Plain_text?