Я пытаюсь создать динамический запрос для своих отчетов. мой запрос возвращает IEnumerable, который использует .select(selectstringquery)
и .where(wherestringquery).
. Строки select и where различаются в зависимости от того, где и когда мне это нужно.Нет свойства или поля в типе динамического класса
string selectstringquery = "student_fname, student_lname"
string wherestringquery = "student_lname='joe'";
var test = (from s in students).select(selectstringquery).where(wherestringquery); //this works well
wherestringquery = "student_isRegistered=false";
var test = (from s in students).select(selectstringquery).where(wherestringquery) //this fails coz isRegistered is a valid proerpty but not is NOT in select query.
Он выдает ошибку Нет свойство или поле 'не student_isRegistered' существует по типу '<> f__AnonymousType337`14'
Но если это работает, когда я положил Where внутри
LINQex.
(from s in students
where s_isRegistered=false).select(selectstringquery)
Как я могу заставить его работать без необходимости включать столбец в запрос выбора? Причина в том, что я хочу повторно использовать запрос во всех отчетах, а некоторым не нужен этот фильтр.
Кроме того, в этом случае, я использую
«если еще» , чтобы определить, если wherestringquery не пуст, иначе я использую точно такой же запрос, как описано выше, но без .где (wherestringquery) , Есть ли способ использовать .where(), даже если wherestringquery пуст? Я пробовал писать .where (true), но это вызывает исключение.
спасибо.
Вы пытались добавить где раньше выбрать ?, Что-то 'уаг тест = (от х у студентов) .где (wherestringquery) .select (selectstringquery)' –
хорошо. это работает. :) как насчет динамики где? Есть ли другой способ использовать только 1 запрос, но где строка иногда пуста? – user742102
Я не думаю, что есть способ сделать это, один взлом - это то, что вы всегда можете иметь оператор where, например. 1 = 1. Нет никакого вреда в использовании, если иначе. –