我的 linq 如下所示
from dt1 in dsResults.Tables[0].AsEnumerable()
join dt2 in dsResults.Tables[1].AsEnumerable()
 on dt1 .Field<decimal>("RecordId") equals dt2.Field<decimal>("RecordId2")
 select dt1 ; 
这将仅检索 dt1 的列。如何使两个表的列都出现?
我可以按照以下线程 从两个与 LINQ 连接的 DataTables 中创建组合 DataTable 执行此操作。C#
     DataTable targetTable = dsResults.Tables[0].Clone();
        var dt2Columns = dsResults.Tables[1].Columns.OfType<DataColumn>().Select(dc =>
            new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
        targetTable.Columns.AddRange(dt2Columns.ToArray());
        var rowData =
            from row1 in dsResults.Tables[0].AsEnumerable()
            join row2 in dsResults.Tables[1].AsEnumerable()
                on row1.Field<decimal>("RecordId") equals row2.Field<decimal>("RecordId2")
            select row1.ItemArray.Concat(row2.ItemArray).ToArray();
        foreach (object[] values in rowData)
            targetTable.Rows.Add(values);
您可以创建一个表示您要显示的列的对象,然后您可以执行以下操作:
public class YourObject
{
 public string Pror1 {get;set;}
 public string Pror2 {get;set;}
}
List<YourObject> result=from row1 in dsResults.Tables[0].AsEnumerable()
    join row2 in dsResults.Tables[1].AsEnumerable()
     on row1.Field<decimal>("RecordId") equals row2.Field<decimal>("RecordId2")
     select new YourObject()
     {
       Pror1=row1.prop1,
       Prop2=row2.prop2,
       ......
     }.ToList(); 
如果要选择所有列,可以执行以下操作
 from row1 in dsResults.Tables[0].AsEnumerable()
        join row2 in dsResults.Tables[1].AsEnumerable()
         on row1.Field<decimal>("RecordId") equals row2.Field<decimal>("RecordId2")
         select new { RowTable1 = row1, RowTable2 = row2}; //anonymous type
在这种情况下,结果的每个元素将具有两个属性:RowTable1将是来自 的行row1,并且RowTable2将是来自的匹配行row2 
1 您可以select clause使用进行调整anonymous type,并使用Field properties
from dt1 in dsResults.Tables[0].AsEnumerable()
join dt2 in dsResults.Tables[1].AsEnumerable()
on dt1 .Field<decimal>("RecordId") equals dt2.Field<decimal>("RecordId2")
 select new
 {
   Property1 = dt1 .Field<decimal>("RecordId"),
   Property2 = dt2 .Field<decimal>("RecordId2")
   ...... 
  }
;
2 如果您不想指定列名
from dt1 in dsResults.Tables[0].AsEnumerable()
join dt2 in dsResults.Tables[1].AsEnumerable()
on dt1 .Field<decimal>("RecordId") equals dt2.Field<decimal>("RecordId2")
 select new
 {
   dt1,
   dt2 
  }
;
3 如果你想在你的序列之间设置联合
  public string ShowNew(string myName)
        {
            RENTALEntities objD = new RENTALEntities();
            var NewObj =
                (from t in objD.TENANTs.ToList()
                 join pt in objD.PROP_TYPE.ToList()
                    on t.Prop_ID equals pt.Prop_ID
                 where t.Surname == myName
                 select new { t.Surname, t.PropAdress, pt.DESCRIPTION, t.RentalIncome }).First();
            return "SWurname" + NewObj.Surname + "<br/>"
                + "Address" + NewObj.PropAdress + "<br/>"
                + "Description" + NewObj.DESCRIPTION + "<br/>"
                + "Rental income" + NewObj.RentalIncome;
        }