Сообщение Re[7]: Тормознутость и кривость linq от 18.03.2016 21:07
Изменено 18.03.2016 21:09 Serginio1
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Ikemefula, Вы писали:
I>>Вот вот. Инструмент не используешь, точных оценок нет, но ты уверенно заявляешь о проблеме с произодительностью и указываешь что проблема именно в рефлексии в том, как linq её использует.
_>Проблема не в том как используют рефлексию в linq, а в том, что её вообще используют. ))) В то время как она не нужна и можно всё сделать во время компиляции.
Я тебе уже приводил примеры где IQueryable строится в дженерик функции. С памятью у тебя совсем плохо
http://www.albahari.com/nutshell/predicatebuilder.aspx
https://github.com/scottksmith95/LINQKit
И использовать
Генерируется следующий запрос
_>Здравствуйте, Ikemefula, Вы писали:
I>>Вот вот. Инструмент не используешь, точных оценок нет, но ты уверенно заявляешь о проблеме с произодительностью и указываешь что проблема именно в рефлексии в том, как linq её использует.
_>Проблема не в том как используют рефлексию в linq, а в том, что её вообще используют. ))) В то время как она не нужна и можно всё сделать во время компиляции.
Я тебе уже приводил примеры где IQueryable строится в дженерик функции. С памятью у тебя совсем плохо
http://www.albahari.com/nutshell/predicatebuilder.aspx
https://github.com/scottksmith95/LINQKit
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));
}
returnthis.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'~')
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Ikemefula, Вы писали:
I>>Вот вот. Инструмент не используешь, точных оценок нет, но ты уверенно заявляешь о проблеме с произодительностью и указываешь что проблема именно в рефлексии в том, как linq её использует.
_>Проблема не в том как используют рефлексию в linq, а в том, что её вообще используют. ))) В то время как она не нужна и можно всё сделать во время компиляции.
Я тебе уже приводил примеры где IQueryable строится в дженерик функции. С памятью у тебя совсем плохо
http://www.albahari.com/nutshell/predicatebuilder.aspx
https://github.com/scottksmith95/LINQKit
И использовать
Генерируется следующий запрос
_>Здравствуйте, Ikemefula, Вы писали:
I>>Вот вот. Инструмент не используешь, точных оценок нет, но ты уверенно заявляешь о проблеме с произодительностью и указываешь что проблема именно в рефлексии в том, как linq её использует.
_>Проблема не в том как используют рефлексию в linq, а в том, что её вообще используют. ))) В то время как она не нужна и можно всё сделать во время компиляции.
Я тебе уже приводил примеры где IQueryable строится в дженерик функции. С памятью у тебя совсем плохо
http://www.albahari.com/nutshell/predicatebuilder.aspx
https://github.com/scottksmith95/LINQKit
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));
}
returnthis.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'~')