动态 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
值。
我在过去三天遇到了一个问题,在 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
值。