动态 Linq - 类型 'Int32?' 上的方法不可访问

Dynamic Linq - Methods on type 'Int32?' are not accessible

我在过去三天遇到了一个问题,在 google 和 Whosebug 上找不到解决方案。

我的模型中有一个可为空的整数 属性。当我尝试使用动态 where 子句在该列上应用任何函数时,我遇到了错误 - "Methods on type 'Int32?' are not accessible".

假设我的模型结构是 -

public class MyTestModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
}

现在,我想要一个从前端动态创建的搜索查询。例如 -

Where("Name.StartsWith(\"t\") and ParentId.ToString().StartsWith(\"1\") ");

我的解决方案适用于所有其他类型,但可为 null 的类型在这里不起作用。我也尝试过检查 null,但没有用。 (从其他论坛阅读):

Where("Name.StartsWith(\"t\") and (ParentId != null and ParentId.ToString().StartsWith(\"1\")) ");

Where("Name.StartsWith(\"t\") and (ParentId != null and ((int?)ParentId).ToString().StartsWith(\"1\")) ");

尝试ParentId.Value.ToString().StartsWith(\"1\")。如果查询将在 SQL 服务器上执行,则不需要检查 null 值,因为 SQL 中没有 NULL 异常。如果将执行查询 "locally"(针对 .NET 集合),您必须检查 null 值。