LINQ к Объекту, с помощью оператора SQL LIKE

У меня есть LINQ к запросу ОБЪЕКТА, который вытягивает от таблицы, но я должен смочь создать "нечеткий" поиск типа. Таким образом, я должен добавить, где пункт, который ищет lastname, ЕСЛИ они добавляют критерии в поле поиска (Текстовое поле, CAN быть пробелом---, в этом случае это вытягивает ВСЕ).

Вот то, что я имею до сих пор:

    var query = from mem in context.Member
                orderby mem.LastName, mem.FirstName
                select new
                {
                    FirstName = mem.FirstName,
                    LastName = mem.LastName,

                };

Это вытащит все из Таблицы-участника, которая находится в объекте Объекта.

Затем у меня есть дополнение к логике:

sLastName = formCollection["FuzzyLastName"].ToString();

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Contains(sLastName));

Проблема состоит в том, когда кнопка поиска нажимается, ничто не возвращается (0 результатов). Я выполнил запрос против SQL Server, что я ожидаю происходить здесь, и он возвращает 6 результатов.

Это - запрос, который я ожидаю:

SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName LIKE '%xxx%'

(когда xxx вводится в текстовое поле),

Кто-либо видит что-то не так с этим?

Править: Зафиксированный Запрос Select. Я имел в виду, чтобы это читало КАК '%xxx %' (НЕ = 'xxx")

12
задан SlackerCoder 22 March 2010 в 18:27
поделиться

3 ответа

Я думаю, вы хотите использовать функцию Contains () строкового параметра следующим образом:

var query = from mem in context.Member
    where mem.LastName.Contains("xxx")
    orderby mem.LastName, mem.FirstName
    select new
    {
        FirstName = mem.FirstName,
        LastName = mem.LastName,
    };

Я думаю, вы также можете используйте StartsWith () и EndsWith () , которые будут эквивалентны SQL «xxx%» и «% xxx» соответственно.

15
ответ дан 2 December 2019 в 18:52
поделиться

Добавьте свой «выбрать новый» в запрос только после того, как вы добавите «Где» пункт.

Следовательно, добавьте предложение select, используя синтаксис вызова объекта, как вы это делали с предложением where.

Непроверено, извините, пожалуйста, за небольшие ошибки, но общая концепция будет такой ....

   using( someContent sc = new someContent())
   {
      var query = sc.Member.OrderBy( i => i.LastName)
                    .ThenBy( i => i.FirstName);

      sLastName = formCollection["FuzzyLastName"].ToString();

      if (!String.IsNullOrEmpty(sLastName))
          query = query.Where(ln => ln.LastName.Contains(sLastName));

      query = query.Select( i => new
                {
                    FirstName = i.FirstName,
                    LastName = i.LastName,

                });
    }
3
ответ дан 2 December 2019 в 18:52
поделиться
SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName = 'xxx'

Это означает, что вы хотите, чтобы фамилия была равна 'xxx'. То, что вы пишете в своем сообщении выше, означает, что фамилия должна содержать 'xxx'.

Чтобы получить равенство, вы должны написать:

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName == sLastName);

Возможно, вам стоит посмотреть на ignore case:

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Equals(sLastName, StringComparison.InvariantCultureIgnoreCase));
1
ответ дан 2 December 2019 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: