c# - 根据条件从DataTable中选择行

标签 c#

我正在尝试使用数据表选择,但我得到的数据不正确

 double marks = 5; 
 DataRow[] result = dsGrades.Tables[0].Select("Convert(MarksFrom, 'System.Decimal') >=" + marks + " And " + marks + "<= Convert(MarksTo, 'System.Decimal') ");

dsGrades 包含以下数据, enter image description here

当“marks”包含“5.0”时,我期待 MarksFrom = 5.0 和 MarksTo = 5.9 的行,因为 5.0 落在这个范围内,但这里它返回 5 行。

数据表选择有什么问题?感谢您的帮助。

最佳答案

如果将您的 DataColumn 类型更改为 double 是有意义的,但是即使使用 decimal,您也不需要在表达式内部进行转换。

请注意,在您提供的示例中,您的约束似乎是倒退的。您指定要 MarksFrom 大于或等于 传入的数量,这不会返回您想要的范围内的一行。

这应该为传入的任何标记返回一行:

double marks = 5.0; 
DataRow[] result = dsGrades.Tables[0].Select($"{marks} >= MarksFrom AND {marks} <= MarksTo");

此外,由于您总是只期待一场比赛,因此您可以将其更改为:

DataRow match = table.Select($"{marks} >= MarksFrom AND {marks} <= MarksTo").SingleOrDefault();
如果返回多个结果,

SingleOrDefault 将抛出一个 InvalidOperationException,在这种情况下这可能是期望的结果。

关于c# - 根据条件从DataTable中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128491/

相关文章:

C# 4.0 中的 C# LINQ/对象初始值设定项示例简而言之

c# - 如何在C#中获取与titleNames中至少一个单词匹配的所有标题

c# - 具有平滑循环的C#音频库?

c# - 注册为 "scoped"或 "transient"的 Dbcontext 是否影响关闭数据库连接

c# - 从数据库填充列表 - System.InvalidCastException

c# - VS 2012 在代码中包含或链接图像

C# MySQL 错误 "Column count doesn' t 匹配第 1 行的值计数"

c# - 向菜单条添加标签

c# - 为什么 azure 搜索会抛出 IndexBatchException 而 IndexingResults 中没有失败

c# - 什么时候结构比类好?