dpokatski 281b167fe1 lab13 6 månader sedan
..
readme.md 281b167fe1 lab13 6 månader sedan

readme.md

Lab 13. Основы LINQ

Тема "Гостиничный бизнес"

исходный массив

string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"};

список для результатов

var selectedPlace = new List<string>();

foreach(string s in place)
{
    // ищем слова начинающиеся на букву "А"
    if (s.ToUpper().StartsWith("А"))
        selectedPlace.Add(s);
}

сортируем получившийся список

selectedPlace.Sort();
 
foreach (string s in selectedPlace)
    Console.WriteLine(s);
Вывод:
Апартаменты
string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"};
 
var selectedPlace = from t in place 
    where t.ToUpper().StartsWith("Н") //фильтрация по критерию
    orderby t  // упорядочиваем по возрастанию
    select t; // выбираем объект
 
foreach (string s in selectedPlace)
    Console.WriteLine(s);
Вывод:
Обычный номер

Методы расширения LINQ

string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"};
 
var selectedPlace = place
    .Where(t=>t.ToUpper().StartsWith("Д"))
    .OrderBy(t => t);
 
foreach (string s in selectedPlace)
    Console.WriteLine(s);
Вывод:
Дешевый номер

Выборка сложных объектов

using System;
List<User> users = new List<User>
{
    new User {
        Name="Максим", 
        Age=17, 
       },
    new User {
        Name="Дмитрий", 
        Age=18, 
        },
    new User {
        Name="Милана", 
        Age=16, 
       },
    new User {
        Name="Георгий", 
        Age=22, 
        }
};
 
var selectedUsers = users.Where(u => u.Age > 16);

foreach (User user in selectedUsers)
    Console.WriteLine($"{user.Name} - {user.Age}");

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    
}
Вывод:
Максим - 17
Дмитрий - 18
Георгий - 22

Проекция

using System;
List<User> users = new List<User>
{
    new User {
        Name="Максим", 
        Age=17, 
       },
    new User {
        Name="Дмитрий", 
        Age=18, 
        },
    new User {
        Name="Милана", 
        Age=16, 
       },
    new User {
        Name="Георгий", 
        Age=22, 
        }
};
 
var items = users.Select(u => new { 
    FirstName = u.Name, 
    DateOfBirth = DateTime.Now.Year - u.Age 
});
 
foreach (var n in items)
    Console.WriteLine($"{n.FirstName} - {n.DateOfBirth}");
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Вывод:
Максим - 2007
Дмитрий - 2006  
Милана - 2008
Георгий - 2002

Выборка из нескольких источников

using System;
List<User> users = new List<User>()
{
    new User {
        Name="Максим", 
        Age=17, 
       },
    new User {
        Name="Дмитрий", 
        Age=18, 
        },
    new User {
        Name="Милана", 
        Age=16, 
       },
    new User {
        Name="Георгий", 
        Age=22, 
        },
};
List<Place> places = new List<Place>()
{
    {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"};
    new Place
    {
        Mesto = "Дешевый номер",
        Price = 999,
    },
    new Place
    {
        Mesto = "Обычный номер",
        Price = 5000,
    },
    new Place
    {
        Mesto = "Дорогой номер",
        Price = 20000,
    },
    new Place
    {
        Mesto = "Номер люкс",
        Price = 100000,
    },
    new Place
    {
        Mesto = "Апартаменты",
        Price = 500000,
    },
};
 

var people = from user in users
    from place in places
    select new { Name = user.Name, Place = place.Mesto };
 
foreach (var p in people)
    Console.WriteLine($"{p.Name} - {p.Place}");
 
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    
}

public class Place
{
    public string Mesto { get; set; }
    public int Price { get; set; }
}
Вывод:
Максим - Дешевый номер
Максим - Обычный номер
Максим - Дорогой номер   
Максим - Номер люкс    
Максим - Апартаменты        
Дмитрий - Дешевый номер
Дмитрий - Обычный номер
Дмитрий - Дорогой номер
Дмитрий - Номер люкс
Дмитрий - Апартаменты
Милана - Дешевый номер
Милана - Обычный номер
Милана - Дорогой номер
Милана - Номер люкс
Милана - Апартаменты
Георгий - Дешевый номер
Георгий - Обычный номер
Георгий - Дорогой номер
Георгий - Номер люкс
Георгий - Апартаменты

Сортировка

using System;
List<User> users = new List<User>()
{
    new User {
    Name="Максим",
        Age=17,
},
    new User {
    Name="Дмитрий",
        Age=18,
},
    new User {
    Name="Милана",
        Age=16,
},
    new User {
    Name="Георгий",
        Age=22,
},
};
List<Place> places = new List<Place>()
{
    new Place
    {
        Mesto = "Дешевый номер",
        Price = 999,
    },
    new Place
    {
        Mesto = "Обычный номер",
        Price = 5000,
    },
    new Place
    {
        Mesto = "Дорогой номер",
        Price = 20000,
    },
    new Place
    {
        Mesto = "Номер люкс",
        Price = 100000,
    },
    new Place
    {
        Mesto = "Апартаменты",
        Price = 500000,
    },
};


var sortedUsers = users.OrderBy(u => u.Name);

foreach (User u in sortedUsers)
Console.WriteLine(u.Name);

public class User
{
    public string Name { get; set; }
public int Age { get; set; }

}

public class Place
{
    public string Mesto { get; set; }
public int Price { get; set; }
}
Вывод:
Дмитрий
Максим 
Милана
Георгий

Множественные критерии сортировки

using System;
List<User> users = new List<User>()
{
    new User {
        Name="Максим", 
        Age=17, 
       },
    new User {
        Name="Дмитрий", 
        Age=18, 
        },
   
    new User {
        Name="Георгий", 
        Age=22, 
        }, 
    new User {
                  Name="Милана", 
                  Age=16, 
                 },
};
List<Place> places = new List<Place>()
{
    new Place
    {
        Mesto = "Дешевый номер",
        Price = 999,
    },
    new Place
    {
        Mesto = "Обычный номер",
        Price = 5000,
    },
    new Place
    {
        Mesto = "Дорогой номер",
        Price = 20000,
    },
    new Place
    {
        Mesto = "Номер люкс",
        Price = 100000,
    },
    new Place
    {
        Mesto = "Апартаменты",
        Price = 500000,
    },
};
 

var result = users
    .OrderBy(u => u.Name)
    .ThenBy(u => u.Age);

foreach (User u in result)
    Console.WriteLine($"{u.Name} - {u.Age}");
 
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    
}

public class Place
{
    public string Mesto { get; set; }
    public int Price { get; set; }
}
Вывод:
Дмитрий - 18
Максим - 17 
Милана - 16
Георгий - 22