суббота, 28 июля 2007 г.

C# 3.0 на пальцах

Сегодня я отмечу одну супер важную вещь, которая перевернёт всю идеологию объектного программирования. Это xLinq. SQL запросы для объектной модели. Этот синтаксический сахар грандиозное решение для простых программистов. Увеличивает качество кода в разы, а читаемость просто идеальная.

Выключите музыку, будьте внимательны.

Итак доменная модель. Как часто вам приходилось делать обход коллекции объектов и из них формировать новую? Не знаю как вам, но мне постоянно :)

Получалась следующая убогая конструкция


foreach(...)
...
if(...)
...
if(...)
...
newArray.Add(x);

Теперь этому положен конец.

Используем конструкцию:
var my = from r in people
where r.Age > 25
select r;
или
var my = people.Where(r => r.Age>25);

(что одно и тоже)

Здесь это главное сообразить где условия, где выборка
В примерах под переменной 'r' что-то типа итератора. То есть пробегаемся по массиву people, последовательно, текущая запись это 'r'. После обхода собираеются все записи удовлетворяющие условию и кладутся в 'my'.

То есть Linx это SQL для объектной модели. Просто класс!
Linq - это sql для объектов, xLinq - для xml, dLinq - для баз.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmptyConsoleApplication
{
class Program
{
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public int Age {get; set;}
}

static void Main(string[] args)
{
List people = new List
{
new Person {FirstName = "Scott", LastName="Guthrie", Age = 20},
new Person {FirstName = "Andre", LastName="Guthrie", Age = 27},
new Person {FirstName = "Peter", LastName="Guthrie", Age = 26}
};

//var my = people.Where(r => r.Age>25);

var my = from r in people
where r.Age > 25
select r;

foreach (var item in my)
{
Console.WriteLine(item.FirstName + ", " + item.LastName);
}
Console.ReadLine();
}
}
}


И в качестве проверки подумайте, что будет если

var my = from r in people
where r.Age > 25
select new Person { FirstName = r.FirstName, LastName = "UNKNOWN", Age = r.Age };


Для примера использовался виртуальныйы образ Orcas Beta 2 (около 5Гб), скачанный
Visual Studio 2008 Downloads (Напомню после VS2005.Net Beta 2 вышел релиз)

1 комментарий:

  1. прошу связаться со мной: по skype мне не удалось связаться с Вами; мне необходима Ваша консультация по словарю словоформ.
    meine-adresse@list.ru,
    pitsen

    ОтветитьУдалить