【问题标题】:Dynamic Linq - Methods on type 'Int32?' are not accessible动态 Linq - 类型“Int32?”的方法无法访问
【发布时间】:2015-08-13 09:54:36
【问题描述】:

自过去三天以来我一直面临一个问题,在 google 和 stackoverflow 上找不到解决方案。

我的模型中有一个可为空的 int 属性。当我尝试使用动态 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\")) ");

【问题讨论】:

    标签: c# linq dynamic-linq


    【解决方案1】:

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

    【讨论】:

    • 我认为你不能使用 ToString 如果它是 Linq to Entites,你必须使用 SqlFunctions.StringConvert 但我认为你不能在动态 linq 中调用它。或者更新版本的 EF 添加了 ToString 支持?
    • @Mant101 他没有指定他使用的是EF还是Linq-to-Sql。 Linq-to-Sql 支持.ToString()(刚刚勾选)
    • ParentId.Value.ToString() 为我工作。谢谢。你能解释一下这背后的逻辑吗?或任何有关它的帮助文章?
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2023-04-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多