动态Linq - 类型'Int32?'的方法无法访问

时间:2015-08-13 09:54:37

标签: c# linq dynamic-linq

我在过去三天遇到问题,无法在google和stackoverflow上找到解决方案。

我的模型中有一个可以为null的int属性。当我尝试使用dynamic where子句在该列上应用任何函数时,我面临一个错误 - “类型'Int32上的方法?'无法访问“。

假设我的模型结构是 -

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,但是不起作用。 (从其他论坛阅读):

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\")) ");

1 个答案:

答案 0 :(得分:0)

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