Re[38]: Есть ли подобие LINQ на других языках/платформах?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.04.21 10:00
Оценка:
Здравствуйте, 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 фремворк получает данные, серилизует их и отправляет клиенту.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.