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

Сообщение 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>
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>
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);