powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity и Like - как побороть ошибку?
3 сообщений из 3, страница 1 из 1
Entity и Like - как побороть ошибку?
    #37928950
KononovAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
...
     // Список участков из Entity
      var query = entDataSet
                     .ZR_TERR
                     .Select(x => new
                                       {
                                           x.ID,
                                           x.CAD_QUART,
                                           x.CAD_NUM,
                                           x.SQUARE,
                                           x.CATEGORY_ID
                                       });

// Здесь в Watch query.Count() = 150;

...   
     // Фильтр по полю CATEGORY
         query = query.Where(x => param.filters.ListCategory.Contains(x.ZR_CATEGORY_ID));  // List<int> param.filters.ListCategory - ID из справочника CATEGORY

// Здесь в Watch query.Count() = 100;

     // Фильтр по маске номера
         query = from c in query
                    where SqlMethods.Like(c.CAD_NUM, param.filters.ListCadNum[0])
                    select c;

// Здесь в Watch query.Count() уже не определяется. 
// Выдает: LINQ to Entities does not recognize the method 'Boolean Like(System.String, System.String)' method, and this method cannot be translated into a store expression.



Как это победить?


Пробовал сделать через Regex так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
delegate bool CadNumsFinder(string CadNum, List<string> Masks);

CadNumsFinder finder = delegate (string CadNum, List<string> Masks)
{
  foreach (string Msk in Masks)
  {
     Regex rx = new Regex(Msk.Replace("?", ".").Replace("*", ".*"));
     if (rx.Match(CadNum).Success)
        return true;
  };
  return false;
};

query = query.Where(x => finder(x.CAD_NUM, param.filters.ListCadNum));



В этом случае выдает:
на query.Count() - The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.




Подскажите, как правильно сделать Like?

Спасибо.
...
Рейтинг: 0 / 0
Entity и Like - как побороть ошибку?
    #37929359
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
         query = from c in query
                    where c.CAD_NUM.Contains(param.filters.ListCadNum[0])
                    select c;



А так?
...
Рейтинг: 0 / 0
Entity и Like - как побороть ошибку?
    #37932087
KononovAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так он найдет вхождение строки в строку. По маске так не получится. Например, надо найти такое - '36:??:0101*'.

Решилось так:
http://stackoverflow.com/questions/3095781/how-to-use-sql-like-with-linq-to-entities
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity и Like - как побороть ошибку?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]