Информация об изменениях

Сообщение Re[16]: «Собаку съел» от 26.01.2017 6:55

Изменено 26.01.2017 7:52 Serginio1

Re[16]: «Собаку съел»
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, samius, Вы писали:


S>>>Однако, строим ли мы дерево вручную, или компилятор его строит, способ вызова оператора сравнения будет одним и тем же. Если, конечо, деревья выражений транслируются в IL. Т.е. никакого инлайнинга по сравнению с написанным в обычном C# коде выражением "field >= start".


S>> Конечно транслируются Программирование на C# 5.0

S>Это я уточняю вариант. Т.е. пишу что речь не про SQL или еще что-то там. Т.е. когда деревья транслируются в IL, то способ вызова оператора сравнения невозможно отличить от того что получается при обычной компиляции исходника C#. Именно это я хотел сказать.

Я же тебе дал ссылкую Там показано во, что транслуруются Expression<Func<int,bool>> greaterThenZero=value=> value>0;

А вот Iquerable принимает как раз Expression. То есть когда ты видишь Where(value=> value>0) то это не Func<int,bool> а Expression<Func<int,bool>>
которые могут и компилироваться в инлайн. Ты же передаешь не функцию, а дерево


S>> Деревья выражений собираются и компилируются в рантайме.

S>> Мы можем собирать SQl выражение из разных кусочков, но на выходе должны получить один Sql запрос.
S>Это известно со времен LinqToSQL
Правильно, на работаем мы с Func, а не Expression.
Re[16]: «Собаку съел»
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, samius, Вы писали:


S>>>Однако, строим ли мы дерево вручную, или компилятор его строит, способ вызова оператора сравнения будет одним и тем же. Если, конечо, деревья выражений транслируются в IL. Т.е. никакого инлайнинга по сравнению с написанным в обычном C# коде выражением "field >= start".


S>> Конечно транслируются Программирование на C# 5.0

S>Это я уточняю вариант. Т.е. пишу что речь не про SQL или еще что-то там. Т.е. когда деревья транслируются в IL, то способ вызова оператора сравнения невозможно отличить от того что получается при обычной компиляции исходника C#. Именно это я хотел сказать.

Я же тебе дал ссылкую Там показано во, что транслуруются Expression<Func<int,bool>> greaterThenZero=value=> value>0;

А вот Iquerable принимает как раз Expression. То есть когда ты видишь Where(value=> value>0) то это не Func<int,bool> а Expression<Func<int,bool>>
которые могут и компилироваться в инлайн. Ты же передаешь не функцию, а дерево


S>> Деревья выражений собираются и компилируются в рантайме.

S>> Мы можем собирать SQl выражение из разных кусочков, но на выходе должны получить один Sql запрос.
S>Это известно со времен LinqToSQL
Правильно, но работаем мы не с Func, а с Expression.