我的 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;
}