【发布时间】:2011-03-16 11:09:08
【问题描述】:
我需要查询包含未知列的数据表以返回列的子集。
显然,使用数据视图这很容易,但是 LINQ 呢?
我会将数据表和列名作为参数传递给应该进行查询的方法。
我没有 LINQ 经验,到目前为止我在 SO 上看到的情况似乎 LINQ 的唯一动态部分是 WHERE 过滤器,而不是选择哪些列。
我错了吗?
如果可以的话,你能给我一个样品吗?
【问题讨论】:
我需要查询包含未知列的数据表以返回列的子集。
显然,使用数据视图这很容易,但是 LINQ 呢?
我会将数据表和列名作为参数传递给应该进行查询的方法。
我没有 LINQ 经验,到目前为止我在 SO 上看到的情况似乎 LINQ 的唯一动态部分是 WHERE 过滤器,而不是选择哪些列。
我错了吗?
如果可以的话,你能给我一个样品吗?
【问题讨论】:
以下是如何使用 Linq to DataSet 选择任意两列的快速示例:
public static void SelectRandomColumns(DataTable dataTable, string col1, string col2)
{
// Select into an anonymous type here, but you could
// select into a custom class
var query = from row in dataTable.AsEnumerable()
select new
{
p1 = row[col1],
p2 = row[col2]
};
// Do whatever you need to do with the new collection of items
foreach (var item in query)
{
Console.WriteLine("{0}: {1}, {2}: {3}", col1, item.p1, col2, item.p2);
}
}
如果您需要选择随机数量的列,那么这会有点棘手,但希望这会让您朝着正确的方向前进。
【讨论】:
我没有使用过它,但是 .NET 3.5 / VS2008 附带的 Dynamic LINQ 库允许您使用基于字符串的选择子句。这是 Scott Guthrie 的博客的link 关于它(其中还包括下载库的链接)。
Scott 博客中的一张图片显示了一个示例 Dynamic LINQ 表达式,它表明表达式的每个主要子句都可以是一个生成的字符串。
希望这会有所帮助!
【讨论】: