如何使用动态列查询数据表

时间:2011-03-10 13:32:47

标签: c# linq datatable

我需要查询具有未知列的数据表以返回列的子集。

显然,使用数据视图这很容易,但LINQ怎么样?

我将把数据表和列名作为参数传递给应该进行查询的方法。

我没有LINQ经验,到目前为止我在SO上看到的似乎是LINQ中唯一的动态部分是WHERE过滤器,而不是哪些列被选中。

我错了吗?

如果是这样,你可以提供样品吗?

2 个答案:

答案 0 :(得分:4)

以下是如何使用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);
    }           
}

如果您需要选择随机数量的列,那么这会变得有点棘手,但希望这会让您朝着正确的方向前进。

答案 1 :(得分:1)

我没有使用它,但.NET 3.5 / VS2008附带的Dynamic LINQ库允许您使用基于字符串的select子句。这是Scott Guthrie关于它的博客的link(其中还包括下载图书馆的链接)。

Scott博客的图片显示了动态LINQ表达式示例,它显示表达式的每个主要子句都可以是生成的字符串。

enter image description here

希望这有帮助!