C# LINQ:如何为“写多个条件”;关于;卡尔斯?
我很难将SQL转换为LINQ语句 下面是SQL语句:C# LINQ:如何为“写多个条件”;关于;卡尔斯?,c#,linq,C#,Linq,我很难将SQL转换为LINQ语句 下面是SQL语句: SELECT * FROM dataTableA INNER JOIN dataTableB ON dataTableA.ID =dataTableB.SNo OR dataTableA.Address = dataTableB.Address WHERE (dataTableA.Name = dataTableB.UserName) 这是或在On子句中的一部分,我不知道如何编写LINQ语法。我已经
SELECT * FROM dataTableA INNER JOIN dataTableB ON dataTableA.ID =dataTableB.SNo OR
dataTableA.Address = dataTableB.Address
WHERE (dataTableA.Name = dataTableB.UserName)
这是或在On
子句中的一部分,我不知道如何编写LINQ语法。我已经尝试了以下没有或条件的报价。请告知
var matches = from rowA in dataTableA.AsEnumerable()
join rowB in dataTableB.AsEnumerable()
on rowA["ID"].ToString().Trim() equals rowB["SNo"].ToString().Trim()
where rowA["Name"].ToString().Trim() == rowB["UserName"].ToString().Trim()
select new { rowA, rowB } ;
这样试试
var matches = from rowA in dataTableA.AsEnumerable()
from rowB in dataTableB.AsEnumerable().Where(x=>x.SNo==rowA.ID || x.Address ==rowA.Address) .AsEnumerable()
where rowA["Name"].ToString().Trim() == rowB["UserName"].ToString().Trim()
select new { rowA, rowB } ;
在对穆克什·卡尔古德的答案稍作修改后,问题解决了。下面是最终确定的工作代码。谢谢大家的建议
var matches = from rowA in dataTableA.AsEnumerable()
from rowB in dataTableB.AsEnumerable().Where(x=>x["SNo"]==rowA["ID"] || x["Address"]==rowA["Address"]) .AsEnumerable()
where rowA["Name"].ToString().Trim() == rowB["UserName"].ToString().Trim()
select new { rowA, rowB } ;
您可以使用组合键在ID
和
如果您想在ID
或address
上加入,您可以联合2个加入,我认为这应该比n更快,其中
s:
可能重复感谢您的回答。但这显示的错误消息“System.Data.DataTable不包含'Where'的定义,也没有扩展方法'Where'接受类型为'System.Data.DataTable'的第一个参数,可以在dataTableB.Where(x=>…)部分找到。我做了一些更改,效果很好。非常感谢您的帮助。@HtetThuzar如果是帮助,请不要说谢谢,如果有vot和正确的标记,我们也可以使用更直接的加入谢谢。但我的要求是,如果两个表中的名称相同,则在ID或地址上联接两个表。只有在所有名称、ID和地址都相同的情况下,复合键的想法才会连接两个表。
var matches = from rowA in dataTableA.AsEnumerable()
from rowB in dataTableB.AsEnumerable().Where(x=>x["SNo"]==rowA["ID"] || x["Address"]==rowA["Address"]) .AsEnumerable()
where rowA["Name"].ToString().Trim() == rowB["UserName"].ToString().Trim()
select new { rowA, rowB } ;
dataTableA.AsEnumerable().join(dataTableB.AsEnumerable(),
ta => new {ta.ID, ta.Adress}, tb => new {tb.SNo, tb.Adress},
(ta, tb) => new {ta, tb})
dataTableA.AsEnumerable().join(dataTableB.AsEnumerable(),
ta => ta.ID, tb => tb.SNo, (ta, tb) => new {ta, tb})
.union(dataTableA.AsEnumerable().join(dataTableB.AsEnumerable(),
ta => ta.Adress, tb => tb.Adress, (ta, tb) => new {ta, tb}))