我用:
我正构建一个Mongo DB Linq查询,如下所示:
这会按预期返回记录:
int.TryParse("1", out intVal);
query = query.Where(x => x.MyIntField == intVal);
当MyDecimalField等于1.0的记录时,这不会返回任何记录:
decimal.TryParse("1.0", out decVal);
query = query.Where(x => x.MyDecimalField == decVal);
有人知道为什么?
答案 0 :(得分:1)
可能有两个问题
第一个问题可能在你的文化中。您文化中的小数分隔符不是.
(可能是,
)。
您可以使用您的文化使用的小数点分隔符。
var parsed = decimal.TryParse("1,0", out decVal); // instead of "," use your culture decimal separator
if (parsed)
{
query = query.Where(x => x.MyDecimalField == decVal);
}
或尝试使用InvariantCulture
:
var parsed = decimal.TryParse("1.0", NumberStyles.Any, CultureInfo.InvariantCulture, out decVal);
if (parsed)
{
query = query.Where(x => x.MyDecimalField == decVal);
}
第二个问题可能是解析一些无法解析为decimal
的文本。如果无法解析此文本,则默认值decVal
为0
,按Where
过滤不会返回MyDecimalField == 0
的值。
您需要检查是否已解析值,如果是,则可以查询某些数据。