Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从SQL到数据集的LINQ_C#_Sql_Linq_Linq To Dataset - Fatal编程技术网

C# 从SQL到数据集的LINQ

C# 从SQL到数据集的LINQ,c#,sql,linq,linq-to-dataset,C#,Sql,Linq,Linq To Dataset,将SQL Join语句转换为LINQ to数据集时遇到问题。此外,考虑到LINQ语句中的其他表将连接到标题表。下面是我的加入声明-感谢您的帮助 FROM Header LEFT JOIN Address ON Header.Customer = Address.Customer AND Header.Company = Address.Company AND ((Header.ShipTo = 'TEMP' AND Header.DocNum = Address.ShipTo) OR

将SQL Join语句转换为LINQ to数据集时遇到问题。此外,考虑到LINQ语句中的其他表将连接到标题表。下面是我的加入声明-感谢您的帮助

FROM Header
LEFT JOIN Address
ON Header.Customer = Address.Customer
AND Header.Company = Address.Company
AND ((Header.ShipTo = 'TEMP' AND Header.DocNum = Address.ShipTo) 
    OR Header.ShipTo <> 'TEMP' AND Header.ShipTo = Address.ShipTo)
来自标题
左连接地址
在标题上。客户=地址。客户
和Header.Company=地址.Company
和((Header.ShipTo='TEMP'和Header.DocNum=Address.ShipTo)
或Header.ShipTo“TEMP”和Header.ShipTo=地址.ShipTo)

在Linq中进行连接时使用
Equals()
方法。使用多列时,必须创建结构相同的匿名类型进行比较

from h in db.header
join a in db.address
on new { 
         cust = h.Customer, 
         comp = h.Company 
       } 
equals new 
       { 
         cust = a.Customer, 
         comp = a.Company 
       }
where ((h.ShipTo == "TEMP" && h.DocNum == a.ShipTo) 
        || h.ShipTo != "TEMP" && h.ShipTo == a.ShipTo)
select h;

谢谢你,先生!我还要补充一点,稍后这个特定的连接可能需要是一个左连接(shiptos可能不存在),并且在这个LINQ语句中还有其他表连接,那么,有没有办法让WHERE子句只影响上面的join语句,而不影响与其他表的联接呢?我可以通过取出WHERE子句并将其添加到join语句来进行左外联接。然后,我将头表和地址表连接了两次,在where子句中,每个场景一次。