LINQTOSql Отсутствует вопрос о параметре - PullRequest
2 голосов
/ 16 июля 2010

У меня длинный запрос LinqtoSQl, в котором несколько параметров я не заставляю пользователя указывать что-либо. Я начал использовать оператор Select Case, который проверял бы, вернее или нет, длину строки параметра> 0 или значение int> 0. Но я понял, что мне придется проверять каждую возможность и создавать запросы на основе каждой.

Я провел некоторый поиск и наткнулся на сообщение, в котором человек, отвечавший на него, говорил, что нужно отменить часть запроса, используя ||. Пройдя еще несколько поисков (и поняв, что у меня есть немного навыков c #, которые у меня есть ||, это условное ИЛИ), я понял, что это мне не поможет.

Я думаю, что я хочу сделать что-то вроде

Dim r = From x in db.List _
        (if firstName.Length < 1 then ignore query
         else)where x.firstName = firstName _
        (if lastName.Length < 1 then ignore query
         else)where x.LastName = lastName _
        Select x

Я знаю, что должен быть лучший способ, чем IfElse, пройти через это ... Я собирался сделать что-нибудь интересное с StringBuilder, но я не уверен, что это "выстрелит", то есть:

Dim sb as New StringBuilder
sb.Append("Dim r = From x in db.List _")
If firstName.Length < 1 then 
  sb.Append("Where x.firstName = firstName") 

тьфу, пожалуйста, скажи мне, что есть лучший способ ...

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Используйте тот факт, что запросы являются составными. Для начала я напишу это на C #, а затем перевожу на VB, если вам это нужно. Принцип был бы таким же.

IQueryable<YourEntityType> query = db.List;
if (firstName != "")
{
    query = query.Where(x => x.firstName == firstName)
}
if (lastName != "")
{
    query = query.Where(x => x.lastName == lastName)
}

Теперь просто прочитайте с query соответственно. (Я изменил природу строковых условий только потому, что проще понять «эта строка - пустая строка», чем «длина этой строки больше 0» - очевидно, оба будут работать.)

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

0 голосов
/ 16 июля 2010

Как насчет ...

Dim r = From x in db.List _
        where (x.firstName = firstName Or firstName = "") _
        And (x.LastName = lastName Or lastName = "") _
        Select x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...