【问题标题】:LINQ or DataTable when number of fields unknown字段数未知时的 LINQ 或 DataTable
【发布时间】:2010-02-25 13:36:22
【问题描述】:

我有一个返回 DataTable 的动态查询。此 DataTable 将包含不同数量的列,具体取决于查询中使用的选择。 我想要一种过滤数据表中记录的有效方法。

例如
DataTable 包含列:A、B、C 和 D

我需要在程序中的多个点查询这些数据。
在某些时候,我可能需要 A=10 且 C>40 的记录。 在另一点上,我可能需要 A

我可以简单地使用数据表过滤器并动态构建选择字符串。我对此没有任何问题。但是我想知道使用 LINQ 是否更适用。我对 LINQ 完全陌生,想使用它,但不知道它的功能。

(目前我使用的是 DataTable,但将来可能会更改为对象集合)

请提出您的想法。

【问题讨论】:

  • “LINQ”我们可以假设您的意思是 LINQ to SQL、LINQ to Entities 或 LINQ to Objects? LINQ 只是一种用于查询集合的语言,而不是一种存储数据的方法,例如 DataTable。事实上,您甚至可以使用 AsEnumerable 扩展方法查询现有的 DataTable。

标签: sql vb.net linq dataset


【解决方案1】:

您可以使用 Linq to DataSet 扩展方法(在 System.Data.DataSetExtensions.dll 中声明)

Dim table As New DataTable
...

Dim query1 = From r In table.AsEnumerable()
             where r.Field(Of Int32)("A") = 10
             AndAlso r.Field(Of Int32)("C") > 40

For Each row As DataRow In query1
    ' Do something with the row
Next

...

Dim query2 = From r In table.AsEnumerable()
             where r.Field(Of Int32)("A") < 10
             AndAlso r.Field(Of Int32)("D") = 90

For Each row As DataRow In query2
    ' Do something with the row
Next

【讨论】:

  • 谢谢。问题是我不知道何时编写需要“A=10”和“C>40”的代码,这些是动态的。我什至不知道我需要查询哪些字段。这些是由代码的其他方面决定的。
  • 使用索引时可能有效吗? "其中 r.Field(Of GetType(queryValue))(index)
  • 非常感谢,但是不同数量的字段呢。有时 A=10,有时 A=10 和 B=20,甚至 A=10 和 B=20 或 C=30
  • 看看 PredicateBuilder 类,它应该可以帮助你实现你想要的。 albahari.com/nutshell/predicatebuilder.aspx
猜你喜欢
  • 2023-03-20
  • 2010-12-22
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多