C# Linq连接多列上的数据表

C# Linq连接多列上的数据表,c#,linq,C#,Linq,我有一个linq语句,它接受两个数据表,并在每个表的id列上将它们连接在一起。我的问题是,有时我要加入的值位于datatable中的另一列中,我希望能够保持语句的原样并查看另一列: 现有: Datatable1.AsEnumerable() .Join(Datatable2.AsEnumerable(), dt1Row => Datatable1.Field<string>(rowid), dt2

我有一个linq语句,它接受两个数据表,并在每个表的id列上将它们连接在一起。我的问题是,有时我要加入的值位于datatable中的另一列中,我希望能够保持语句的原样并查看另一列:

现有:

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"));

           });
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1Row=>Datatable1.Field(rowid),
dt2Row=>Datatable2.Field(rowid),
(dt1Row,dt2Row)=>new{dt1Row,dt2Row})
.ForEach(o=>{
o、 dt1Row.SetField(o.dt1Row.Table.Columns[“name”]。序号,o.dt2Row.Field(“name1”);
});
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
//想健身吗?
(dt1Row=>Datatable1.Field(“rowid”),
dt2Row=>Datatable2.Field(“rowid”))
||(dt1Row=>Datatable1.Field(“rowid”),
dt2Row=>Datatable2.Field(“名称”),
(dt1Row,dt2Row)=>new{dt1Row,dt2Row})
.ForEach(o=>{
o、 dt1Row.SetField(o.dt1Row.Table.Columns[“name”]。序号,o.dt2Row.Field(“name1”);
});

您可以使用
iif
语句:

.Join(Datatable2.AsEnumerable(),
      dt1Row => Datatable1.Field<string>("rowid"),
      dt2Row => condition ? Datatable2.Field<string>("rowid") : Datatable2.Field<string>("name"),
      (dt1Row , dt2Row) => new { dt1Row , dt2Row})
.Join(Datatable2.AsEnumerable(),
dt1Row=>Datatable1.Field(“rowid”),
dt2Row=>条件?Datatable2.Field(“rowid”):Datatable2.Field(“name”),
(dt1Row,dt2Row)=>new{dt1Row,dt2Row})

条件
必须返回一个
布尔值

使用任意dt.any()作为条件在Datatable2的联接中添加另一个Linq语句

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})
Join(Datatable2.AsEnumerable(),
dt1Row=>Datatable1.Field(“rowid”),
dt2Row=>Datatable1.AsEnumerable.Any(x=>x.Field(“rowid”)==Datatable2.Field(“rowid”))
?Datatable2.字段(“rowid”):Datatable2.字段(“名称”),
(dt1Row,dt2Row)=>new{dt1Row,dt2Row})
很抱歉耽搁了, 您可以使用以下方法:

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
              });

条件是否可以是Datatable1.Field(“rowid”)==Datatable2.Field(“rowid”)与您编写的内容不会有
语法错误或
编译错误,如果您可以比较它们,您可以使用它代替
条件
,但我不知道
逻辑错误
,尝试检查我认为您想在其
rowid
上加入第二个
DataTable
,如果它等于第一个
DataTable
rowid
,如果不是,您想将第一个
DataTable
与第二个
DataTable
连接在
rowid
上,第一个
DataTable
与第二个
DataTable
连接在一起,如果我答对了,我认为您需要更改
linq
语句,可能是这样的,在linq语句中,它们是实现这一点的一种方法吗?知道如何在不使用另一个带有连接的语句的情况下更改该语句吗?