Linq to SQL - как динамически фильтровать по столбцам, не выбранным - PullRequest
1 голос
/ 12 мая 2009

Проблема

Использование ссылки на SQL Я хотел бы фильтровать по столбцам, которые я не хочу возвращать в операторе выбора. Это прекрасно работает, если запрос строится сразу. В ситуациях, когда я пытаюсь построить предложение where динамически, я получаю ошибку времени компиляции, так как столбец не включен в select.


Пример

РАБОТЫ

Dim resultA = From logItem In dc.Log 
Where logItem.Message.Contains(searchText) 
Select logItem.LogID, logItem.DateLogged

НЕ РАБОТАЕТ

Dim resultB = From logItem In dc.Log 
Select logItem.LogID, logItem.DateLogged

If (Not String.IsNullOrEmpty(searchText)) Then 
    resultB = q.Where(Function(logItem) 
    logItem.Message.Contains(searchText))
End If

Я не уверен, как это обойти. Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 12 мая 2009

Не можете ли вы потом сделать выбор? Я не знаю Vb, но что-то вроде:

Dim resultA = From logItem in dc.Log Select logItem

If (Not String.IsNullOrEmpty(searchText)) Then resultA = q.Where(Function(logItem) logItem.Message.Contains(searchText))

resultA = from logItem in resultA Select logItem.LogID, logItem.DateLogged

Я думаю, что все еще будет генерировать полезный SQL.

0 голосов
/ 12 мая 2009

Спасибо за ваш вклад, Стивен. Ваше предложение заставило меня задуматься, и мое окончательное решение было основано на этом. Однако я нашел способ повторно использовать один и тот же объект, используя лямбда-выражение для указания выбора в конце (так же, как в операторах where):

q = q.Select (Функция (logItem) Новый журнал с {.LogID = logItem.LogID, .DateLogged = logItem.DateLogged}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...