我正在尝试使用数据表选择,但我得到的数据不正确
double marks = 5;
DataRow[] result = dsGrades.Tables[0].Select("Convert(MarksFrom, 'System.Decimal') >=" + marks + " And " + marks + "<= Convert(MarksTo, 'System.Decimal') ");
当“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/