查询中的LINQ十进制值

时间:2017-06-06 14:11:24

标签: c# asp.net-mvc mongodb linq

我用:

  • Asp.net核心
  • MongoDB驱动程序2.4.2

我正构建一个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);

有人知道为什么?

1 个答案:

答案 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的文本。如果无法解析此文本,则默认值decVal0,按Where过滤不会返回MyDecimalField == 0的值。

您需要检查是否已解析值,如果是,则可以查询某些数据。