2015-10-18 2 views
0

Я пытаюсь создать динамический запрос для своих отчетов. мой запрос возвращает 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 внутри

LINQ

ex.

(from s in students 
where s_isRegistered=false).select(selectstringquery) 

Как я могу заставить его работать без необходимости включать столбец в запрос выбора? Причина в том, что я хочу повторно использовать запрос во всех отчетах, а некоторым не нужен этот фильтр.

Кроме того, в этом случае, я использую

«если еще» , чтобы определить, если wherestringquery не пуст, иначе я использую точно такой же запрос, как описано выше, но без .где (wherestringquery) , Есть ли способ использовать .where(), даже если wherestringquery пуст? Я пробовал писать .where (true), но это вызывает исключение.

спасибо.

+0

Вы пытались добавить где раньше выбрать ?, Что-то 'уаг тест = (от х у студентов) .где (wherestringquery) .select (selectstringquery)' –

+0

хорошо. это работает. :) как насчет динамики где? Есть ли другой способ использовать только 1 запрос, но где строка иногда пуста? – user742102

+0

Я не думаю, что есть способ сделать это, один взлом - это то, что вы всегда можете иметь оператор where, например. 1 = 1. Нет никакого вреда в использовании, если иначе. –

ответ

1

Вы пытаетесь применить предложение where после выбора меньшего количества столбцов с помощью предложения select. Просто сделайте так, чтобы перед выбором столбцов, например.

var test = (from s in students).where(wherestringquery).select(selectstringquery); 
Смежные вопросы