2013-11-07 2 views
0

Я использую запрос Dynamic Linq. Я динамически генерирую условие запроса в виде строки и перехожу к запросу. Ниже приведен код, который я использую.Динамический запрос LINQ не работает должным образом с полем таксономии

var q = dc.ListDirectory.AsQueryable().Where(condition).OrderBy("Title"); 
foreach (var p in q) 
{ 
    Console.WriteLine(p.Title);`enter code here` 
} 

Этот запрос workes отлично (с другими строковыми полей даже с большим объемом данных) для полой таксономии исключения. Поскольку я не смог напрямую составить поле таксономии, я только сравнил свою строку. Условие для области таксономии, как

Type.Label = "Текст"

Quering с таксономической полевых условиях: С только 10 нет. элементов в списке работает нормально.

Но это терпит неудачу, когда нет. элементов в списке составляет около 419.

Что я нашел, он начинает выполнение цикла foreach еще до получения значения в var q и дает ссылку на объект не установлен ... ошибка.

Любой ключ?

+0

Итак, где вы получаете 'NullReferenceException'? В заявлении LINQ? Или в петле foreach? –

+0

В цикле foreach и только с условием поля таксономии (когда ему нужно идти с 419 элементами списка). – user2966878

+0

Несколько непонятных вещей: [1] 'Type.Label =« Текст »- это не сравнение, а назначение, опечатка? [2] 'Where()' принимает какой-то «Func» ... кусок кода, упомянутый в [1], не является одним из таких, так что вы на самом деле проходите? [3] Если ваш код в цикле 'foreach' на самом деле является тем, что находится в вашей программе, и вы получаете« NullReferenceException », существует только одна вещь, которая может быть нулевой,' p', поэтому каким-то образом вы LINQ оператор возвращает нулевые элементы, но вам трудно помочь, не зная, что вы запрашиваете. Если вы предоставите более подробную информацию, отредактируйте сам вопрос. –

ответ

0

Вы ищете c.TaxnonomyColumnName].Label.Equals("Text") ... но это не гарантирует, что c.Title не будет пустым (я не уверен, что c в этом случае, поэтому я не могу вам помочь, почему это было бы ноль).

Если вы не хотите, чтобы получить исключение ссылочной ссылки, то я могу добавить дополнительное предложение where, чтобы отфильтровать их.

var q = from c in dc.ListDirectory 
     where (c.[TaxnonomyColumnName].Label.Equals("Text") && c.Title != null) 
     select c.Title; 

foreach (var p in q) { Console.WriteLine(p); } 
Смежные вопросы