Сообщение Re[23]: Есть ли подобие LINQ на других языках/платформах? от 19.04.2021 18:26
Изменено 19.04.2021 21:54 Serginio1
Re[23]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Serginio1, Вы писали:
S>>На yield построен Linq
S>>Непонятно?
IT>Как тебе такой linq без yield и даже без IEnumerable?
IT>
Спасибо Интересно не знал, что SQL синтаксис может работать не только с IEnumerable.
И прикольно смотреть как действуют collectionSelector и resultSelector
И в 2008 работает! Вот так век живи и век учись!!!
IT>Здравствуйте, Serginio1, Вы писали:
S>>На yield построен Linq
S>>Непонятно?
IT>Как тебе такой linq без yield и даже без IEnumerable?
IT>
IT>static void Main()
IT>{
IT> var n =
IT> from c in 1.ToMaybe()
IT> from s in "2".ToMaybe()
IT> from x in 2.ToMaybe()
IT> select s + c + x;
IT> Console.WriteLine(n);
IT>}
IT>abstract class Maybe<T>
IT>{
IT> public class Nothing : Maybe<T> {}
IT> public class Just : Maybe<T>
IT> {
IT> public T Value;
IT> }
IT> public override string ToString() => this switch
IT> {
IT> Just j => j.Value.ToString(),
IT> _ => "Nothing"
IT> };
IT>}
IT>static class Extensions
IT>{
IT> public static Maybe<T> ToMaybe<T>(this T value)
IT> {
IT> return value == null ? (Maybe<T>)new Maybe<T>.Nothing() : new Maybe<T>.Just { Value = value };
IT> }
IT> public static Maybe<T2> SelectMany<T1,T2>(
IT> this Maybe<T1> source, Func<T1,Maybe<T2>> selector)
IT> {
IT> if (source is Maybe<T1>.Just j) return selector(j.Value);
IT> return new Maybe<T2>.Nothing();
IT> }
IT> public static Maybe<T3> SelectMany<T1,T2,T3>(
IT> this Maybe<T1> source, Func<T1,Maybe<T2>> collectionSelector, Func<T1,T2,T3> resultSelector)
IT> {
IT> return source.SelectMany(x => collectionSelector(x).SelectMany(y => resultSelector(x, y).ToMaybe()));
IT> }
IT>}
IT>
Спасибо Интересно не знал, что SQL синтаксис может работать не только с IEnumerable.
И прикольно смотреть как действуют collectionSelector и resultSelector
И в 2008 работает! Вот так век живи и век учись!!!
Re[23]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Serginio1, Вы писали:
S>>На yield построен Linq
S>>Непонятно?
IT>Как тебе такой linq без yield и даже без IEnumerable?
IT>
Спасибо Интересно не знал, что SQL синтаксис может работать не только с IEnumerable.
И прикольно смотреть как действуют collectionSelector и resultSelector
И в 2008 работает! Вот так век живи и век учись!!!
Ну для меня запись типа намного более читаема
чем
IT>Здравствуйте, Serginio1, Вы писали:
S>>На yield построен Linq
S>>Непонятно?
IT>Как тебе такой linq без yield и даже без IEnumerable?
IT>
IT>static void Main()
IT>{
IT> var n =
IT> from c in 1.ToMaybe()
IT> from s in "2".ToMaybe()
IT> from x in 2.ToMaybe()
IT> select s + c + x;
IT> Console.WriteLine(n);
IT>}
IT>abstract class Maybe<T>
IT>{
IT> public class Nothing : Maybe<T> {}
IT> public class Just : Maybe<T>
IT> {
IT> public T Value;
IT> }
IT> public override string ToString() => this switch
IT> {
IT> Just j => j.Value.ToString(),
IT> _ => "Nothing"
IT> };
IT>}
IT>static class Extensions
IT>{
IT> public static Maybe<T> ToMaybe<T>(this T value)
IT> {
IT> return value == null ? (Maybe<T>)new Maybe<T>.Nothing() : new Maybe<T>.Just { Value = value };
IT> }
IT> public static Maybe<T2> SelectMany<T1,T2>(
IT> this Maybe<T1> source, Func<T1,Maybe<T2>> selector)
IT> {
IT> if (source is Maybe<T1>.Just j) return selector(j.Value);
IT> return new Maybe<T2>.Nothing();
IT> }
IT> public static Maybe<T3> SelectMany<T1,T2,T3>(
IT> this Maybe<T1> source, Func<T1,Maybe<T2>> collectionSelector, Func<T1,T2,T3> resultSelector)
IT> {
IT> return source.SelectMany(x => collectionSelector(x).SelectMany(y => resultSelector(x, y).ToMaybe()));
IT> }
IT>}
IT>
Спасибо Интересно не знал, что SQL синтаксис может работать не только с IEnumerable.
И прикольно смотреть как действуют collectionSelector и resultSelector
И в 2008 работает! Вот так век живи и век учись!!!
Ну для меня запись типа намного более читаема
var selectedUsers = from user in users
from lang in user.Languages
where user.Age < 28
where lang == "английский"
select user;
чем
var selectedUsers = users.SelectMany(u => u.Languages,
(u, l) => new { User = u, Lang = l })
.Where(u => u.Lang == "английский" && u.User.Age < 28)
.Select(u=>u.User);