我有大DataTable我想要获得此DataTable的子集,表示为DataTable。 简要说明如何在DataTable中选择特定列。
我正在尝试这样的事情,但它不起作用......
DataTable dTable = new DataTable();
...
...
...
DataTable dt = from field in dTable
where field.Field<string>("Manager")
where field.Field<string>("Phone")
select field;
也许我的代码错了,我如何从一个DataTable到另一个DataTable的“管理员”和“电话”列而不用循环思考它?
答案 0 :(得分:5)
引用DataTableExtensions -
http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx
则...
var whatever = dTable.AsEnumerable();
然后根据MSDN示例......
var productNames = from products in table.AsEnumerable()
select products.Field<string>("ProductName");
编辑/更新:不幸的是,我认为没有内置的直接强制转换回具有不同架构的DataTable。您 使用DataTable?我相信它......因为重构和测试代码可能需要付出太多努力。祝你好运并让我们发布,因为使用强类型列表更加有趣。
答案 1 :(得分:2)
你可以写:
var query = from row in dTable.AsEnumerable()
select new
{
manager = row.Field<string>("Manager"),
phone = row.Field<string>("Phone")
};
答案 2 :(得分:1)
您可以在AsEnumerable的帮助下,在DataSet上的DataTable或Specific表上执行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)));
}