Dynami c linq запрос с iqueryable не оценивается должным образом - PullRequest
0 голосов
/ 20 апреля 2020

Я генерирую динамический c запрос на основе выбранных пользователями фильтров. Затем я запускаю этот запрос для вложенного объекта, и мне нужно оценить результат, однако, когда я пытаюсь глубже запросить в свойствах вложенных объектов, он всегда возвращает 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; }
}

Я использую класс расширения для генерации Queryable из моего HoldingClass:

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», то он работает, но если я go глубже, он останавливается.

1 Ответ

0 голосов
/ 20 апреля 2020

Возможно, у вас есть ноль, и вы получите исключение нулевой ссылки. Вы уверены, что Attributes инициализирован?

Если нет, вы можете изменить .Any() на ?.Any() и работать с нулевым значением.

...