Re[50]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.10.15 11:51
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Это всё рекламные выступления. ) А вот в обсуждение по ссылке выше были уже реальные результаты. Причём не от всяких там C++'ков, а от спецов по C#, которые тоже весьма недовольны быстродействием EF.


Кстати а как заранее компилировать такие запросы

 public  IQueryable<TEntity> НайтиПоВхождениюВНаименование<TEntity>(paramsstring[] keywords) where TEntity : СправочникПредок

        {

            var predicate = PredicateBuilder.False<TEntity>();

 

            foreach (string keyword in keywords)

            {

                string temp = keyword;

                predicate = predicate.Or(p => p.Наименование.Contains(temp));

            }

            return this.Set<TEntity>().AsExpandable().Where(predicate);

        }





И использовать



var бд = Константы1С.ГлобальныйКонтекст.БД;

 

            var запрос = бд.НайтиПоВхождениюВНаименование<Справочник.Номенклатура>("Linq", "Наше", "Все").Select(товар => товар.Наименование);

 

            foreach (var товар in запрос)

            {

 

                Console.WriteLine("{0} ", товар);

 

            }



Генерируется следующий запрос



SELECT

    [Extent1].[DESCR] AS [DESCR]

    FROM [dbo].[SC84] AS [Extent1]

 

    WHERE ([Extent1].[DESCR] LIKE @p__linq__0 ESCAPE N'~') 

          OR([Extent1].[DESCR] LIKE @p__linq__1 ESCAPE N'~') 

          OR([Extent1].[DESCR] LIKE @p__linq__2 ESCAPE N'~')



Поясню. Есть обобщенная функция с ограничением на СправочникПредок в котором есть свойство Номенклатура в которую подается список строк.
Запрос возвращает все элементы которые содержат в наименовании любую строку из списка
и солнце б утром не вставало, когда бы не было меня
Отредактировано 05.10.2015 12:03 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.