C# 3.0 и LINQ
От: Ivan Bodyagin Австрия http://rsdn.ru
Дата: 14.11.07 17:12
Оценка: 2115 (40) +1
Статья:
C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


Авторы:
Ivan Bodyagin

Аннотация:
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...
Мы уже победили, просто это еще не так заметно...
Re: Оффтоп
От: Shota  
Дата: 14.11.07 21:42
Оценка:
Здравствуйте, Ivan Bodyagin, Вы писали:

IB>Статья:

IB>C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


IB>Авторы:

IB> Ivan Bodyagin

Кстати, сейчас на codeproject проводится конкурс статей на тему VS 2008. Спонсор — MS, поэтому призы деньгами
Re: C# 3.0 и LINQ
От: Аноним  
Дата: 31.03.08 07:12
Оценка:
Здравствуйте, Ivan Bodyagin, Вы писали:

IB>Статья:

IB>C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


IB>Авторы:

IB> Ivan Bodyagin

IB>Аннотация:

IB>С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


здесь
Re: C# 3.0 и LINQ
От: V.Petrovski Беларусь  
Дата: 31.03.08 07:48
Оценка:
Здравствуйте, Ivan Bodyagin,

Статья очень хорошая для ознакомления с C# 3.0 и LINQ, но вот здесь ошибка:

Util.f1(Util.f2(Util.f3(x, y))))
f1().f2().f3(x, y)


Дожно быть
Util.f1(Util.f2(Util.f3(x, y))))
f3(x, y).f2().f1()


SafeDevelop
Re[2]: C# 3.0 и LINQ
От: EvilChild Ниоткуда  
Дата: 31.03.08 09:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>здесь


Статья хорошая, но в определении AnonymousClass2 допущены ошибки — generic parameters TA и TB не описаны и имя конструктора не совпадает с именем класса.
Дожно быть как-то так:

        public class AnonymousClass2<TA, TB>
        {
            readonly TA _A;

            public TA A
            {
                get { return _A; }
            }

            readonly TB _B;

            public TB B
            {
                get { return _B; }
            }

            public AnonymousClass2(TA A, TB B)
            {
                _A = A;
                _B = B;
            }
        }
Re[2]: C# 3.0 и LINQ
От: IB Австрия http://rsdn.ru
Дата: 31.03.08 19:54
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Статья очень хорошая для ознакомления с C# 3.0 и LINQ,

спасибо.

VP>но вот здесь ошибка:

Этот код вообще в ворде писался, поэтому не удивительно.. )
Мы уже победили, просто это еще не так заметно...
Re[3]: C# 3.0 и LINQ
От: V.Petrovski Беларусь  
Дата: 01.04.08 07:42
Оценка: :))) :))
Здравствуйте, IB, Вы писали:

IB>Этот код вообще в ворде писался, поэтому не удивительно.. )

Я ведь код тоже не в VS читал


SafeDevelop
Re: C# 3.0 и LINQ
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.04.08 11:26
Оценка:
Здравствуйте, Ivan Bodyagin, Вы писали:
Расширяющие методы

Выход придумали следующий (точнее, позаимствовали из следующего стандарта C++, который так, похоже, и не появится на свет до выхода C# 3.0 – прим.ред.)


Вообщето расширяющие методы (helper) существовали уже давно в Delphi.Net (увидевшего свет вместе с Net 1.1). И там это была необходимость для более легкого переноса нативного кода, дополняя (расширяя) классы нативными методами. Так что если это и сахар то весьмя эффективный.
и солнце б утром не вставало, когда бы не было меня
Re[2]: C# 3.0 и LINQ
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.04.08 15:42
Оценка: 7 (1)
Здравствуйте, Serginio1, Вы писали:

S>Вообщето расширяющие методы (helper) существовали уже давно в Delphi.Net (увидевшего свет вместе с Net 1.1). И там это была необходимость для более легкого переноса нативного кода, дополняя (расширяя) классы нативными методами. Так что если это и сахар то весьмя эффективный.


В Дельфи они тоже были не первыми. Реально первоисточником (надеюсь, я не ошибаюсь) является еще не принятый стандарт C++ 0x. Там эта идея еще в году в 2002-ом была пожалуй.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: C# 3.0 и LINQ
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.04.08 15:45
Оценка: +4
Здравствуйте, Ivan Bodyagin, Вы писали:

IB>Статья:

IB>C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


На мой взгляд название не несоответствует. В статье в основном говорится о расширениях в C#, а вот тема ЛИНК-а затронута только вскользь. Надеюсь, Иван таки напишет нам еще одну статейку где он расскажет об оставшихся нераскрытыми темах.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# 3.0 и LINQ
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.04.08 16:49
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>В Дельфи они тоже были не первыми. Реально первоисточником (надеюсь, я не ошибаюсь) является еще не принятый стандарт C++ 0x. Там эта идея еще в году в 2002-ом была пожалуй.

Первыми, что касается Net.
и солнце б утром не вставало, когда бы не было меня
Re[2]: C# 3.0 и LINQ
От: IB Австрия http://rsdn.ru
Дата: 04.04.08 15:20
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>На мой взгляд название не несоответствует. В статье в основном говорится о расширениях в C#, а вот тема ЛИНК-а затронута только вскользь.

Не, название как раз соответствует... =)
Просто про LINQ статей и блогов написано вагон, а хотелось показать на чем LINQ основан и что эти расширения по сути и есть LINQ. Что, с одной стороны, LINQ определил реализацию этих расширений, а с другой — без этих расширений не получился бы никакой LINQ.
Если же продолжать, то наверное имеет смысл написать о применении LINQ-а в быту..
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[3]: C# 3.0 и LINQ
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.04.08 14:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Дельфи они тоже были не первыми. Реально первоисточником (надеюсь, я не ошибаюсь) является еще не принятый стандарт C++ 0x. Там эта идея еще в году в 2002-ом была пожалуй.

Ну судя по статье и дате выхода Delphi 7 это утверждение можно оспорить. В людом случае для Delphi они были более необходимы, впрочем как уже их сейчас хорошо прикручивают для лямбд (например http://www.rsdn.ru/article/dotnet/cslambda.xml#ETMAC
Автор(ы): Трей Нэш
Дата: 09.02.2008
Глава из книги “C# 2008: ускоренный курс для профессионалов”
) пример мемоизации впечатляет. Мало придумать, важно эффективно применить по месту.
и солнце б утром не вставало, когда бы не было меня
Re[3]: C# 3.0 и LINQ
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.04.08 14:45
Оценка: 1 (1)
Здравствуйте, IB, Вы писали:

IB>Не, название как раз соответствует... =)

IB>Просто про LINQ статей и блогов написано вагон, а хотелось показать на чем LINQ основан и что эти расширения по сути и есть LINQ. Что, с одной стороны, LINQ определил реализацию этих расширений, а с другой — без этих расширений не получился бы никакой LINQ.

Из названия это понять практически невозможно. Когда читаешь название, то думаешь, что статья будет о новой версии Шарпаа и о ЛИНК-е.

IB>Если же продолжать, то наверное имеет смысл написать о применении LINQ-а в быту..


Я бы предпочел по началу детальную статью о том как устроен LINQ to SQL, а уже потом как его в быту применять.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# 3.0 и LINQ
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.04.08 18:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Ну судя по статье и дате выхода Delphi 7 это утверждение можно оспорить.

Имелась ввиду статья http://www.rsdn.ru/article/?177
Автор(ы): Михаил Полюдов
Дата: 20.02.2003
Статья описывает возможности Delphi7 по созданию приложений для платформы .NET
и солнце б утром не вставало, когда бы не было меня
Re[4]: C# 3.0 и LINQ
От: IB Австрия http://rsdn.ru
Дата: 05.04.08 21:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> Когда читаешь название, то думаешь, что статья будет о новой версии Шарпаа и о ЛИНК-е.

Ну дык, она именно об этом... =)

VD>Я бы предпочел по началу детальную статью о том как устроен LINQ to SQL, а уже потом как его в быту применять.

Не, Linq to SQL — это отдельная тема, сначала надо просто про LINQ в быту, а потом уже про SQL и прочие окружающие приседания.. )
Мы уже победили, просто это еще не так заметно...
Re: C# 3.0 и LINQ
От: Mace Windu  
Дата: 10.04.08 12:07
Оценка:
Здравствуйте, Ivan Bodyagin, Вы писали:

Немного фиксов к примерам:

Потерялся 0 в сравнении
ConditionDelegate<int> isEven = n => n % 2 == ;


Ненужный параметр t:
public Func<T, R> MakeLambda<T, R>(Func<T, R> f, T t){ return f; }



Ну и тут впринципе конфликт имен для u:
var userProjector = MakeLambda((User u) => new { u.Name, u.Login, u.EMail });
var limitedEdition = userProjector(u);
Re: C# 3.0 и LINQ
От: Аноним  
Дата: 21.06.08 08:04
Оценка:
Здравствуйте, Ivan Bodyagin, Вы писали:

IB>Статья:

IB>C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


По поводу анонимных типов — они вполне выходят за границу методов:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
 
namespace an {
    class Program {
        static  Dictionary<object, string> dict = new Dictionary<object, string>();
        public static void Main(string[] args) {
            // TODO: Implement Functionality Here
            Add();
            Get();
        }
        
        public static void Add() {
            dict.Add(new {x=5, y=6}, "test");
        }
        
        public static void Get(){
            Console.WriteLine(dict[new{x=5, y=6}]);
        }
    }
}

Естественно, обратиться к полям класса вне метода нельзя, потому как компилятор не знает типа. Но пользоваться вот такими вот конструкциями для сравнений очень удобно.
Re[2]: C# 3.0 и LINQ
От: desco США http://v2matveev.blogspot.com
Дата: 21.06.08 12:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Ivan Bodyagin, Вы писали:


IB>>Статья:

IB>>C# 3.0 и LINQ
Автор(ы): Ivan Bodyagin
Дата: 14.11.2007
С выходом третьей версии C# появляется новая сущность — LINQ (Language Integrated Query) и данная статья посвящена как раз описанию места, которое занимает LINQ во всей дотнетной кухне, что во что integrated и как этим можно пользоваться...


А>По поводу анонимных типов — они вполне выходят за границу методов:

А>
А>using System;
А>using System.Text;
А>using System.Collections.Generic;
А>using System.Linq;
 
А>namespace an {
А>    class Program {
А>        static  Dictionary<object, string> dict = new Dictionary<object, string>();
А>        public static void Main(string[] args) {
А>            // TODO: Implement Functionality Here
А>            Add();
А>            Get();
А>        }
        
А>        public static void Add() {
А>            dict.Add(new {x=5, y=6}, "test");
А>        }
        
А>        public static void Get(){
А>            Console.WriteLine(dict[new{x=5, y=6}]);
А>        }
А>    }
А>}
А>

А>Естественно, обратиться к полям класса вне метода нельзя, потому как компилятор не знает типа. Но пользоваться вот такими вот конструкциями для сравнений очень удобно.

ну только при условии, что методы, создающие экземпляр и использующие его находятся в одной сборке

Lib
    public static class Factory
    {
        public static Dictionary<object, object> Create()
        {
            return new Dictionary<object, object> {{new {x = "a", y = 10}, ""}};
        }
    }


App

    class Program
    {
        public static Dictionary<object, object> Create()
        {
            return new Dictionary<object, object> { { new { x = "a", y = 10 }, "" } };
        }

        static bool Run(Func<Dictionary<object, object>> f)
        {
            var key = new {x = "a", y = 10};
            var dict = f();
            return dict.ContainsKey(key);
        }

        static void Main(string[] args)
        {
            Console.WriteLine(Run(Create));
            Console.WriteLine(Run(Factory.Create));
        }
    }


True
False

Re[2]: C# 3.0 и LINQ
От: IB Австрия http://rsdn.ru
Дата: 21.06.08 17:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>По поводу анонимных типов — они вполне выходят за границу методов:

Ну как... Если поместить в какой-нибудь другой объект, то таки да — выходят.
Называется этот фокус "cast by example", можно даже этюд в стиле nikov-а изобразить:
    public class Holder
    {
        private object _t;

        public void Store<T>(T t)
        {
            _t = t;
        }

        public T Get<T>(T t)
        {
            return (T)_t;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var holder = new Holder();
            holder.Store(new {a = 1, b = "str 1" });
            var result = holder.Get(new { a = 2, b = "str 2" });
            Console.WriteLine(result.a);
            Console.WriteLine(result.b);
        }
    }

Угадай, что на консоли будет?

А> Естественно, обратиться к полям класса вне метода нельзя, потому как компилятор не знает типа.

Как видишь можно, было бы желание..

А> Но пользоваться вот такими вот конструкциями для сравнений очень удобно.

Как совершенно справедливо было замечено, не очень, потому как только в пределах одной сборки живет.

Ну и возвращаясь к сути вопроса — я не уверен, что помещение анонимного типа внутрь object-а или обобщенного типа и протаскивание его в таком виде означает, что "анонимный тип выходит за границу методов". Это не анонимный тип выходит, это его "супертип" выходит, и то, как видно, не далеко.
Мы уже победили, просто это еще не так заметно...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.