НРАВИТСЯ в запросе OData - PullRequest
       2

НРАВИТСЯ в запросе OData

2 голосов
/ 29 октября 2010

Я преобразовываю проект из linq2sql для использования источника данных.Я пытаюсь найти пользователя, подобного этому ...

FrameworkEntities db = new FrameworkEntities(
    new Uri("http://localhost/odata/FrameworkService.svc"));
User user = db.Users.Where(
    u => SqlMethods.Like(u.UserName, UserName)).FirstOrDefault();

, но получаю сообщение об ошибке «Метод« Boolean Like (System.String, System.String) »не может быть использован на клиенте;только для перевода на SQL. "Это было возможно в linq2sql, поэтому мне просто интересно, как бы я изменил это, чтобы он работал со службой odata.Я не нашел ни одной статьи об этом.

Ответы [ 3 ]

2 голосов
/ 29 октября 2010

Как говорит ошибка, SqlMethods.Like () предназначен для перевода в SQL.Запросы oData не переводятся в SQL, поэтому вы не можете использовать этот метод.Лучше всего использовать IndexOf с StringComparison.InvariantCultureIgnoreCase для эмуляции нечувствительной к регистру версии String.Contains.

О ... и вы можете объединить ваши звонки с Where и FirstOrDefault:

User user = db.Users
              .Where(u => u.UserName.IndexOf(Username, 
                  StringComparison.InvariantCultureIgnoreCase) > 0)
              .FirstOrDefault();
0 голосов
/ 06 августа 2015

В качестве альтернативы вы можете использовать «Запуски с» выражениями фильтра в Одата.

Пример:

    var query = context.Users;
    query = query.AddQueryOption("$filter", String.Format("UserName startswith {0}", UserName));
    Users sers = new DataServiceCollection<User>(query);

Это создаст URI, например: http://localhost:7048/OData/Users?$filter=UserName запускается с «Обамой»

Ссылка: https://msdn.microsoft.com/en-us/library/hh169248(v=nav.80).aspx

0 голосов
/ 19 июля 2014

OData содержит подстроку функции.Для небольшого проекта, над которым я недавно работал, меня беспокоило наличие данных «LIKE» в виде строки в трех свойствах модели данных.

$filter=(IN_OUT eq '0' and (substringof('D20033', toupper(BENEFICIARY)) or substringof('D20033', toupper(ORIGINATOR)) or substringof('D20033', toupper(MEMO))))

Я также использовал функцию toupper для свойств моделив сочетании с использованием заглавной буквы строки поиска, чтобы у меня был поиск без учета регистра.Поэтому здесь меня беспокоит, что IN_OUT будет '0' и 'D20033' в одном или нескольких из трех полей: BENEFICIARY, ORIGINATOR или MEMO.

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