【问题标题】:Dynamic linq query with iqueryable not evaluating properly具有 iqueryable 的动态 linq 查询未正确评估
【发布时间】:2020-04-20 10:59:56
【问题描述】:

我正在根据用户选择的过滤器生成动态查询。然后我对嵌套对象运行此查询并需要评估结果,但是当我尝试深入查询嵌套对象属性时,它总是返回 false。

这是我的嵌套对象HoldingClass,它有行,而行又具有我需要评估的属性。

class HoldingClass
{
    public IEnumerable<Rows> Rows { get; set; }

}

class Rows 
{
    public IEnumerable<Attribute> Attributes { get; set; }
    public string StringProp { get; set; }
}

class Attribute
{
    public string Key { get; set; }
    public object Value { get; set; }
}

我正在使用扩展类从我的 HoldingClass 生成 Queryable:

public static IQueryable<HoldingClass> Where(this HoldingClass holdingClass, string predicate, params object[] values)
    => new List<HoldingClass> {holdingClass}.AsQueryable().Where(predicate, values);

然后我通过插入一个字符串作为“IfCriteria”来运行查询,示例查询:

var ifCriteria = "Rows.Any() AND Rows.Where(Attributes.Any(Key == "\Filter1\" AND Value == "\ValueToSwitchOn\") AND StringProp == "\PropValue\").Any()"

if (holdingClass.Where(ifCriteria).Any()) {
}

有什么想法我做错了吗?如果我只是打开“StringProp”,那么它可以工作,但如果我更深入,它就会停止。

【问题讨论】:

    标签: c# .net linq dynamic-linq


    【解决方案1】:

    也许你有一个空值,并得到一个空值引用异常。 你确定Attributes 已经初始化了吗?

    如果不是,你可以将.Any()改为?.Any()并处理空值。

    【讨论】:

    • 列表总是被初始化的,所以这不应该是问题。
    • 好的。这是什么语言的查询?怎么解析的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多