任何人都可以告诉我如何在下面给出的select语句中指定特定列:
var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable()
on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { dt1, dt2 };
DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp", typeof(string)));
finaldt.Columns.Add(new DataColumn("Method", typeof(string)));
finaldt.Columns.Add(new DataColumn("Class", typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string)));
DataRow newrow = finaldt.NewRow();
foreach (var row in combinedrows)
{
DataRow dataRow = finaldt.NewRow();
dataRow.ItemArray = row.dt1.ItemArray;
finaldt.Rows.Add(dataRow);
}
答案 0 :(得分:1)
如果要指定要选择的列,则应尝试更改
combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals
dt2.Field("MethodName") select new { dt1, dt2 };
in
combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals
dt2.Field("MethodName") select new
{
dt1.columnName;
dt2.columnName2;
dt2.columnName3;
etc.
}
希望这是你想要的。
您可以查看LinQ-CheatSheet
答案 1 :(得分:0)
嗯,这不是很清楚你想要什么,但也许这样呢?
var combinedRows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable()
on dt1.Field<string>("MethodName")
equals dt2.Field<string>("MethodName")
select new { MethodName = dt1.Field<string>("MethodName"),
Foo = dt2.Field<string>("Foo"),
Bar = dt1.Field<int>("Bar") };
答案 2 :(得分:0)
不确定你的问题是什么...... linq查询是dsResults.Tables [0]和dsResults.Tables [1]之间基于MethodName字段的常规连接。
你想做什么?
答案 3 :(得分:0)
请阅读您的评论。我想你想要的不是一个联接,而是以下几个:
var combinedrows =
from dt1 in DsResults.Tables[0].AsEnumerable()
from dt2 in DsResults.Tables[1].AsEnumerable()
where dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { dt1, dt2 };
它从两个具有相同“MethodName”的表中返回ony行。
答案 4 :(得分:0)
@Prem:使用此代码工作正常,请查看。
var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { sp = dt1.Field<string>("Tab1_col1"), Method = dt1.Field<string>("MethodName"), _class = dt1.Field<string>("Class"),
BLLMethod = dt1.Field<string>("Tab2_col2")
};
DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp", typeof(string)));
finaldt.Columns.Add(new DataColumn("Method", typeof(string)));
finaldt.Columns.Add(new DataColumn("Class", typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string)));
DataRow newrow = finaldt.NewRow();
foreach (var row in combinedrows)
{
DataRow dr = finaldt.NewRow();
dr["sp"] = row.sp;
dr["Method"] = row.Method;
dr["Class"] = row._class;
dr["BLLMethod"] = row.BLLMethod;
finaldt.Rows.Add(dr);
}