.net LINQ到数据表
我有一个大的DataTable,我想把这个DataTable的子集表示为DataTable。 简要说明如何在DataTable中选择特定列 我试过这样的东西,但没用.net LINQ到数据表,.net,linq,.net,Linq,我有一个大的DataTable,我想把这个DataTable的子集表示为DataTable。 简要说明如何在DataTable中选择特定列 我试过这样的东西,但没用 DataTable dTable = new DataTable(); ... ... ... DataTable dt = from field in dTable where field.Field<string>("Manager")
DataTable dTable = new DataTable();
...
...
...
DataTable dt = from field in dTable
where field.Field<string>("Manager")
where field.Field<string>("Phone")
select field;
DataTable dTable=newdatatable();
...
...
...
DataTable dt=数据表中的from字段
其中field.field(“经理”)
where field.field(“电话”)
选择字段;
也许我的代码是错误的,我如何从一个数据表到另一个数据表获取“managers”和“Phone”列而不循环使用它呢?参考数据表扩展- 然后
var whatever = dTable.AsEnumerable();
然后根据MSDN示例
var productNames = from products in table.AsEnumerable()
select products.Field<string>("ProductName");
var PRODUCTNAME=来自表中的产品。AsEnumerable()
选择产品。字段(“产品名称”);
编辑/更新:不幸的是,我不认为有一个内置的直接转换回具有不同模式的数据表。您有使用数据表吗?我相信。。。因为重构和测试代码可能会花费太多的精力。祝你好运,让我们保持联系,因为使用强类型列表更有趣。你可以写:
var query = from row in dTable.AsEnumerable()
select new
{
manager = row.Field<string>("Manager"),
phone = row.Field<string>("Phone")
};
var query=来自dTable.AsEnumerable()中的行
选择新的
{
经理=行字段(“经理”),
电话=行字段(“电话”)
};
您可以在AsEnumerable的帮助下对DataTable或DataSet上的特定表执行LINQ查询
下面是一个例子,这可能会有所帮助
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn dc;
DataRow dr;
ds.DataSetName = "products";
dt.TableName = "product";
dc = new DataColumn("product_id",long.MaxValue.GetType());
dt.Columns.Add(dc);
dc = new DataColumn("product_name");
dt.Columns.Add(dc);
dr = dt.NewRow();
dr["product_id"] = 1;
dr["product_name"] = "Monitor";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["product_id"] = 2;
dr["product_name"] = "Mouse";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["product_id"] = 3;
dr["product_name"] = "KeyBoard";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["product_id"] = 4;
dr["product_name"] = "LCD";
dt.Rows.Add(dr);
ds.Tables.Add(dt);
IEnumerable<DataRow> objResult1 = from tbl in dt.AsEnumerable()
where tbl.Field<long>(0) <= 2
select tbl;
Response.Write("<b>Query Results 1</b>");
foreach (DataRow row in objResult1)
{
Response.Write(string.Format("<br/>Product ID: {0} , Product Name: {1}", row.Field<long>(0), row.Field<string>(1)));
}
IEnumerable<DataRow> objResult2 = from tbl in ds.Tables[0].AsEnumerable()
let product_name = tbl.Field<string>(1)
where product_name.StartsWith("Key")
|| product_name.StartsWith("Mo")
select tbl;
Response.Write("<br/><br/><b>Query Results 2</b>");
foreach (DataRow row in objResult2)
{
Response.Write(string.Format("<br/>Product ID: {0} , Product Name: {1}", row.Field<long>(0), row.Field<string>(1)));
}
DataSet ds=新数据集();
DataTable dt=新的DataTable();
数据列dc;
数据行dr;
ds.DataSetName=“产品”;
dt.TableName=“产品”;
dc=新的数据列(“product_id”,long.MaxValue.GetType());
dt.Columns.Add(dc);
dc=新数据列(“产品名称”);
dt.Columns.Add(dc);
dr=dt.NewRow();
dr[“产品标识”]=1;
dr[“产品名称”]=“监视器”;
dt.Rows.Add(dr);
dr=dt.NewRow();
dr[“产品标识”]=2;
dr[“产品名称”]=“鼠标”;
dt.Rows.Add(dr);
dr=dt.NewRow();
dr[“产品标识”]=3;
dr[“产品名称”]=“键盘”;
dt.Rows.Add(dr);
dr=dt.NewRow();
dr[“产品标识”]=4;
dr[“产品名称”]=“液晶显示器”;
dt.Rows.Add(dr);
ds.Tables.Add(dt);
IEnumerable objResult1=来自dt.AsEnumerable()中的tbl
tbl.字段(0)的位置您正在访问什么?SQL?CLR对象?你能告诉我你的目的是什么吗?通过你当前的代码我不明白你想要什么(两个嵌套的在哪里?)可能重复我的代码可能是错误的,我如何从一个数据表到另一个数据表获得“managers”和“Phone”列而不循环思考它?野山羊,我一直在找你…谢谢克里斯!但我必须得到一个小的数据表作为结果。@WildGoat:这就是你要找的。不幸的是,结果数据表必须与原始数据表具有相同的模式(字段)。总之,这是不可能的。长版本也适用于任何类型的匿名类型: