Linq连接多个列上的数据表
本文关键字:数据表 连接 Linq | 更新日期: 2023-09-27 18:02:21
我有一个linq语句,它接受两个数据表,并在每个表的id列上将它们连接在一起。我的问题是,有时我要加入的值是在数据表的不同列中,我希望能够保持语句的原样,并查看另一列:
现有:Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1Row => Datatable1.Field<string>(rowid),
dt2Row=> Datatable2.Field<string>(rowid),
(dt1Row , dt2Row) => new { dt1Row , dt2Row}).ToList()
.ForEach(o => {
o.dt1Row.SetField(o.dt1Row.Table.Columns["name"].Ordinal, o.dt2Row.Field<string>("name1"));
});
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
//Trying to work out?
( dt1Row => Datatable1.Field<string>("rowid"),
dt2Row=> Datatable2.Field<string>("rowid"))
|| ( dt1Row => Datatable1.Field<string>("rowid"),
dt2Row=> Datatable2.Field<string>("name")),
(dt1Row , dt2Row) => new { dt1Row , dt2Row}).ToList()
.ForEach(o => {
o.dt1Row.SetField(o.dt1Row.Table.Columns["name"].Ordinal, o.dt2Row.Field<string>("name1"));
});
很抱歉,您可以使用以下方法:
var dt1 = DataTable1.AsEnumerable();
var dt2 = DataTable2.AsEnumerable();
var query = (from dt1Row in dt1
from dt2Row in dt2
where dt1Row["rowid"] == dt2Row["rowid"] ||
dt1Row["rowid"] == dt2Row["name"]
select new
{
dt1Row,
dt2Row
});
您可以使用iif
语句:
.Join(Datatable2.AsEnumerable(),
dt1Row => Datatable1.Field<string>("rowid"),
dt2Row => condition ? Datatable2.Field<string>("rowid") : Datatable2.Field<string>("name"),
(dt1Row , dt2Row) => new { dt1Row , dt2Row})
condition
必须返回boolean
值
在Datatable2的Join中添加另一条Linq语句,使用any dt.Any()作为条件
Join(Datatable2.AsEnumerable(),
dt1Row => Datatable1.Field<string>("rowid"),
dt2Row => Datatable1.AsEnumerable.Any(x => x.Field<string>("rowid") == Datatable2.Field<string>("rowid"))
? Datatable2.Field<string>("rowid") : Datatable2.Field<string>("name"),
(dt1Row , dt2Row) => new { dt1Row , dt2Row})