2012-07-04 3 views
2

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

Что я пытаюсь сделать, это:

Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc) 

'if dropdown has value... 

objQuery = objQuery.Where(Function(wc) wc.DynamicColumnName < txtFilterValue1.Text) 

wc.DynamicColumnName должен быть заменен, например, wc.Price.

-

кода то, что я пытался теперь после некоторых ответов является:

Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc) 

     If ddlFilterColumn1.SelectedValue <> "" And ddlFilterOperator1.SelectedValue <> "" And txtFilterValue1.Text <> "" Then 

      Select Case ddlFilterOperator1.SelectedValue 
       Case "..%" 
        objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id Like txtFilterValue1.Text & "%") 
       Case "%.." 
        objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id Like "%" & txtFilterValue1.Text) 
       Case Else '< > = <> 
        'objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id < txtFilterValue1.Text) 
        'objQuery = objQuery.Where(Function(wc) "wc." + ddlFilterColumn1.SelectedValue.ToString + " < " + txtFilterValue1.Text) 
        objQuery = objQuery.Where(Function(wc) "wc.WHMCSClient_id < 500") 
      End Select 

     End If 

    Response.Write(objQuery.ToString()) 

Но я получаю следующее сообщение об ошибке (оригинальная ошибка в нидерландском, но она говорит, как следует): Преобразование из строки wc.WHMCSClient_id < 500 для ввода типа Boolean является недопустимым.

+0

Надеюсь кто-то может дать вам лучший пример, но вы, вероятно, хотите [Как использовать деревья выражений для создания динамических запросов] (http://msdn.microsoft.com/en-us/library/bb882637.aspx) – Rup

ответ

2

Это довольно старая статья, но я думаю, что это все-таки жизнеспособными

Скотт Гу писал о библиотеке а Dynamic LINQ некоторое время назад, который по существу позволяет использовать строки для запроса коллекции в «LINQ» - . Тип формата, то есть что-то вроде этого:

Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc) 

// if dropdown has value... 
Dim result = objQuery.Where("MyColumnName < " + txtFilterValue1.Text); 

Вот ссылка на полный текст статьи: Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

+0

Я пробовал, но я получу предупреждение о том, что он не может быть запущен прямо во время работы, см. оригинальное сообщение выше для моего нового кода. –

+0

Вам не нужно использовать декларацию 'Function (wc)', это просто строка, переданная в динамическое предложение LINQ '.Where'. – Richard

+0

Когда я передаю только строку, моя Visual Studio сразу предупреждает меня, что эта функция не принимает столько аргументов. Пример в ссылке - это C#, думаю, я работаю в VB. –

Смежные вопросы