Здравствуйте, Serginio1, Вы писали:
S>>>Деревья выражений не используются в IEnumerable, но ты не против них!
I>>Деревья нужны что бы строить скажем SQL. Добавил пров — получил итерацию.
I>>С IEnumerable так невозможно.
S> Можно!! Берем Roslyn и обрабатываем! Нет проблем
Какой проблемы нету? У тебя есть экземпляр IEnumerable, куда мы натыкали кучу фильтров и проекций из разных мест приложения — плагины, конфигурация, юзеринпут и запросы от клиента.
Какой код нужно написать, что бы построить по этому экземпляру правильный SQL, что бы отдать его базе данных?
I>>Когда тебе надо по одному источнику проходить несколько раз, что вобщем частый случай, издержки от yield и тотальной ленивости возрастают до небес.
S>Linq это цепочка вызовов в 5 и более расширений и по этому ленивость важна, что бы свести количество итераций к минимуму.
Вот, смотри — где здесь лишние итерации и лишнее выделение памяти:
let state = initial();
let i = 0;
while(true) {
i++;
state = state.next(i);
if(isGoodEnough(state, i)) {
return {state, i};
}
}
Покажи пальцем, где здесь "инициализация List всегда неленивая!!!!!!1111"
S>Именно на этом и посмтроен линк для коллекций. И ты мне за это ставишь минус!!!
Очевидно — не за это.
S>То есть те кто использует Linq для коллекций дураки и нужно использовать List
Минусы — за подобные утверждения. Ты приписываешь мне бред который в твоей собственной голове.
I>>На всякий — я портировал часть Linq и ODATA на JavaScript. Просто что бы ты представлял, откуда у меня познания в Linq и его применениях.
S>Я рад за тебя. Зачем ты портировал если он такой плохой.
А я нигде не говорю, что он плохой. Это ты сам додумываешь, и интерпретируешь таким вот образом.
> ODATA вообще то не имеет отношения к Linq.
То есть, ты не в курсе, что ODATA построена на linq ?
> 1C использует, но линка в нем нет. Но есть Linq to ODATA но там IQueriable
Читаем твою же ссылку:
То есть можно работать с ODATA полностью на Linq
S>И в итоге за что минус!!!
В т.ч. за то, что пишешь, не имея представления. Немного ликбеза, ODATA это SQL over HTTP, и вот как это работает
var result = (from Тестовый in context.Catalog_Тестовый
where Тестовый.Ref_Key == new Guid("aada18ad-5308-11e5-8e05-c86000c70663")
select Тестовый).SingleOrDefault();
По этой хрени мы, точнее linq odata provider, используя Expression, построит запрос примерно такого вида
GET /Catalog_Тестовый?
$filter=Ref_Key eq aada18ad-5308-11e5-8e05-c86000c70663
&$select=Тестовый
&$top=1
Далее, сервер всё это распарсит, построит по этому запросу Expression, который, в свою очередь, передаём в Linq пров типа linq2db и он вернёт нам данные.
Далее, odata фремворк получает данные, серилизует их и отправляет клиенту.