vb.net - 通过动态 LINQ 查询数据表
问题描述
我有一个 DataTable,喜欢通过动态 LINQ 进行查询。
Imports System.Linq.Dynamic.Core
...
Dim Values as DataTable
...
当我简单地选择一个特定的列(名为“年龄”)时,例如:
Dim result = Values.AsEnumerable.AsQueryable.Select("age")
但是现在我想通过 where 子句过滤 DataTable 并且这不起作用或者我不知道如何正确实现它:
Dim result = Values.AsEnumerable.AsQueryable.Where("age > 60")
我在这里得到:
“没有为 System.Object 和 System.Int32 定义二元运算符 GreaterThan”
好的,我在一定程度上理解了错误消息,但我不知道如何相应地更改我的代码。
解决方案
正如评论中提到的,如果您使用强类型数据表,它会让您的生活变得更加美好。这些是由设计者生成的数据表,具有命名、类型化的属性,而不是一切都是对象,通过字符串访问
我们通过使用“添加新项目”将 DataSet 添加到我们的项目中来创建强类型数据表:
你可以忽略我说的 C#——这正是我正在为其他一些 qustion 工作的项目所使用的。这两种语言在底层是相同的。在您的 VB 项目的数据标题下查找您的
当你添加它时,你会得到一个表面,右键单击它并Add >> DataTable
. 右键单击数据Add >> Column
表,然后给出列名称和属性。对于学生和班级,我通过链接数据库并将数据库表放到设计器中来生成它们,所以我没有手动创建它们,但你可以。如果您正在使用数据库,请右键单击表面并添加 >> TableAdapter,配置连接和查询,您将获得一个模仿您的数据库表的数据表。如果您没有数据库,只需手动创建表和列 - 我是使用“NotFromDb”表完成的;对于那个我点击并添加数据表/列。即使您没有数据库并且“手动”创建数据表,它仍然会更快,Dim dt as new DataTable
dt.Columns.Add("Age", ...)
等_
所以你最终会得到这样的东西:
而已; 您的强类型数据表已准备就绪!与常规数据表相比,它们更易于使用。例如,要递增 NotfromDB 中的所有 BlahInt,代码如下所示:
For Each r in notFromDb
r.BlahInt += 1
Next r
在弱类型数据表中也是如此:
For Each r as DataRow in notFromDb.Rows
r("BlhaInt") = DirectCast(r("BlahInt"), Integer) + 1
Next r
您可以看到我在 BlhaInt 中打错了字,而 Intellisense 不会帮助我,因为它是一个字符串,而不是一个完整的属性名称。代码也更难阅读,因为一切都是一个对象,由一个字符串并且必须被强制转换以使其有用
总而言之,简单的数据表很麻烦,我很少使用它们,因为强类型的数据表很容易创建并且使用起来更好
现在,关于动态的要点:
我的数据库中有这些值(这是:
这只是测试数据,但给了我们一些可以使用的东西。我们将为 ClassID > 5 做一个动态处理
这是执行动态后我的 VS 在调试器中停止的照片:
this
在 C# 中与me
在 VB 中相同。如前所述,这是 C#,因为它是我周围的东西;看看schoolDB.Where
它与 VB 中的相同。schoolDS
是我的Students
强类型数据表所在的数据集,因此在数据schoolDS.
表名称之前
我已经将操作的结果赋给了dt
变量,C#var
就像VB的Dim
所以你可以看到.. 它只是工作,它比使用弱类型数据表和拥有所有 AsEnumerable AsQueryable blah 更简单、更干净
推荐阅读
- python - 如何使用 user_passes_test 查看特定页面?
- dafny - 验证 dafny 中的谓词是否适用于所有整数
- python - 计算 pyspark 数据框中的出现次数
- javascript - 随机图像和配对文本选择 javascript
- javascript - 在 Jest 环境被拆除后导入文件
- java - 如何返回一个未知值的 char 数组?
- matplotlib - 单个图形上的多种不同类型的图并将其保存到视频中
- angular - 无法读取未定义的 Observables Ionic 的属性方向
- sql - 案例表达式求和
- windows - 关于在不区分大小写的系统(Windows)中执行迁移的 SVN 到 Git 迁移问题