Подтвердить что ты не робот

LINQ to Entity, используя оператор SQL LIKE

У меня есть запрос LINQ to ENTITY, который извлекается из таблицы, но мне нужно создать поиск типа "нечеткий". Поэтому мне нужно добавить предложение where, которое ищет по имени, если они добавят критерии в поле поиска (текстовое поле, CAN be blank --- в этом случае оно тянет ВСЕ).

Вот что я до сих пор:

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

                };

Это вытащит все из таблицы Member, которая находится в объекте Entity.

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

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 вводится в текстовое поле)

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

EDIT: Исправлен запрос SELECT. Я имел в виду, чтобы он читал LIKE '% xxx%' (NOT = 'xxx))

4b9b3361

Ответ 1

Я думаю, вы хотите использовать функцию 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 "соответственно.

Ответ 2

Добавьте ваш запрос "select new" в запрос только после добавления предложения "Where".

Поэтому добавьте предложение 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

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);

Возможно, вам стоит посмотреть на случай игнорирования:

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Equals(sLastName, StringComparison.InvariantCultureIgnoreCase));