2

我的 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 的列。如何使两个表的列都出现?

4

4 回答 4

2

我可以按照以下线程 从两个与 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);
于 2012-09-14T05:13:33.673 回答
0

您可以创建一个表示您要显示的列的对象,然后您可以执行以下操作:

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

于 2012-09-13T09:25:41.743 回答
0

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 如果你想在你的序列之间设置联合

链接:http: //msdn.microsoft.com/en-us/library/bb386993.aspx

于 2012-09-13T09:26:45.270 回答
0
  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;
        }
于 2014-05-20T08:42:10.493 回答