Здравствуйте, Serginio1, Вы писали:
I>>Можешь вписать вместо итд свой пример с монадами
S>Xml там IQueryable на самом то деле. Смотрим исходники https://referencesource.microsoft.com/#System.Xml.Linq/System/Xml/Linq/XLinq.cs,3354dac0913e417b
Сам подумай, что же значит.
S>и считаем количество yield, что только подтверждает мои выводы
Количество yield ничего не значит. IQueryable можно прикрутить поверх чего угодно. А раз так, то это и есть общий случай.
S>Что такое RX и WMI даже я не знаю но наверняка итераторы с yield
Не знаешь, но мнение имеешь. RX еще назывался linq2events.
S>Вернее RX я еще помню по использованию в TS. Но и там yield напрополую используются
S>https://github.com/dotnet/reactive/tree/9f2a8090cea4bf931d4ac3ad071f4df147f4df50/Ix.NET/Source/System.Interactive.Async/System/Linq/Operators
Браво, ты узнал, что Обсервер и Итератор дуальны, а раз так, то можно один сводить к другому.
Ровно то же можно написать и без yield, с таким же количеством кода.
вместо
yield a будет
observer.next(a)
I>>IQueryable можно натянуть на что угодно, хоть на коллекции, хоть на базу данных. Потому это гораздо больше похоже на общий случай. А вот IEnumerable это просто последовательность, и даже нужды коллекций покрывает не полностью.
S> Кто тебе запрещает писать расширения используя yield?
Ок. Покажи пров для mssql на yield. Валяй.
S>IQueryable это вообще деревья выражений. B и обрабатывать их то еще удовольствие.
S>А yield с парой строчек написал любое расширение!
Покажи пров для mssql на yield. Хотя бы идею выдай.
S> Да но Linq включает IEnumerable и он основной в использовании. Нахрен он тогда нужен.
Ты путаешь "основной" и "общий случай", а так же "yield" и "IEnumerable".
Общий случай, это например когда IQueryable можно распространить на что угодно, просто добавив провайдер. А это значит, что в коде тебе надо просто использовать IQueryable.
А вот с IEnumerable так не получится. А раз так, то это частный случай.
S>Всякое EF и Linq2DB появились значительно позже хотя IQueryable был. Опять же Expression trees никакого отношения не имеют к IEnumerable, однако ты же согласен, что без него не было бы Linq
Без IQueryable не было бы, да. Именно это позволяет прикрутить Linq к чем угодно. А вот yield для BD — хоть раком встань, ничего не выйдет.