0 7.6K

Шпаргалка по LINQ и SQL

Шпаргалка по LINQ и SQL, смотрите так же Шпаргалка по C# и .NET Framework

Linq

Последовательность, - любая коллекция, реализующая интерфейс IEnumerable<> или IQueryable<>. Оператор запроса - метод, преобразующий последовательность. Запрос - выражение, которое преобразует последовательность с помощью операторов запроса.

Синтаксис
LINQ поддерживает два вида синтаксиса: синтаксис запросов и синтаксис методов
Синтаксис запросов:

int[] MyArray = { -1, 2, 3, -4 };
var res = from n in MyArray
          where n > 0
          select n; // 2, 3

Такой синтаксис всегда должен начинаться с from in и заканчиваться select или group. Синтаксис методов:

int[] array = { -5, 2, 3, -11 };
var res = array.Where(n => n > 0); // 2, 3

Все стандартные методы реализованы как расширяющие, большинство из них принимает в параметр лямбда-выражение или делегат.
Методы можно применять один за другим:

int[] msv = { -1, 2, 3, -4, 0, 2, 8, 9, 3 };
var res = msv.Where(n => n > 0 && n % 2 == 0).Select(n => n+1).Take(3).Sum(); // 15

Оба вида синтаксиса можно использовать вместе.

Лямбда-выражения

Лямбда-выражения - это специальный синтаксис для сокращённого объявления анонимных методов.
Пример синтаксиса: n => n * n Это выражение принимает один параметр (n) и возвращает n * n.
Пример использования:

int[] msv = { 1, 2, 3 };
var res = msv.Select(n => n * n); // 1, 4, 9

=> - лямбда оператор, который читается как "переходит в".
Слева от лямбда оператора стоят параметры ввода, справа - выражение
Это лямбда-выражение эквивалентно такому: n => { return n * n; } и такому delegate(int n) { return n * n; }
Стандартные операторы запроса используют обобщенные делегаты Func, например Func<int, bool> соответствует лямбда-выражению int => bool, а Func<string, string, int> - (string, string) => int
Возвращаемое значение Func всегда указывается в качестве последнего аргумента.
В лямбда-выражения можно использовать внешние переменные:

int[] msv = { 1, 2, 3 };
int mult = 10;
var res = msv.Select(n => n * mult);
foreach (int i in res) Console.WriteLine(i); // 10, 20, 30

Отложенное выполнение

Большая часть операторов запроса выполняется не при конструировании, а только при переборе элементов.
Пример:

int[] msv = { 1, 2, 3 };
int mult = 2;
var res = msv.Select(n => n * mult); // Здесь запрос еще не выполняется
mult = 20;
foreach (int i in res) Console.WriteLine(i); // Он выполняется здесь
// 20, 40, 60

Это называется отложенным или ленивым выполнением, оно характерно для всех операторов запроса, кроме операторов, возвращающих один элемент (First) или значение (Sum), а также для операторов преобразования типа (ToArray, ToList)

Расширяющие методы

Поскольку все операторы запроса реализованы в виде расширяющих методов, можно легко добавить собственные
Несколько примеров расширяющих методов для LINQ. Метод, обратный методу Where, возвращает последовательность, элементы которой не удовлетворяют предикату

public static IEnumerable<TSource> WhereNot<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicat) 
{
    foreach (TSource element in source)
    {
        if (predicat(element) == false)
            yield return element;
    }
}
//Оператор yield return возвращает один элемент коллекции и перемещает итератор дальше, yield break прекращает итерацию.

// использование метода
int[] msv = { 1, 2, 3, 4, 0 };
var res = msv.WhereNot(n => n > 2); // 1, 2, 0

Метод, возвращающий последовательность от и до определенных индексов

public static IEnumerable<TSource> TakeFromTo<TSource>(this IEnumerable<TSource> source, int from, int to)
{
    int iterator = -1;
    foreach (TSource element in source)
    {
        iterator++;
        if (iterator >= from && iterator <= to)
            yield return element;
    }
}

// пример использования
int[] msv = { 1, 2, 3, 4, 5, 6 };
var res = msv.TakeFromTo(1, 4); // 2, 3, 4, 5

Быстрая сортировка

public static IEnumerable<T> QuickSort<T>(this IEnumerable<T> source) where T : IComparable<T> 
{ 
if (!source.Any()) return source; 
var first = source.First();
return source.GroupBy(i => i.CompareTo(first)).OrderBy(g => g.Key).SelectMany(g => g.Key == 0 ? g : QuickSort(g)); }

Определение минимального и максимального числа в массиве

// using System.Linq; 
int min = a.Min(); int max = a.Max();

Определение суммы чисел в массиве

int sum = a.Sum();

Изменяет порядок элементов последовательности на противоположный

// using System.Linq;
int[] reversedArray = a.Reverse().ToArray();

Возвращает различающиеся элементы последовательности

int[] uniqArray = a.Distinct().ToArray();

Возвращает только те элементы последовательности first, которых нет в последовательности second

int[] arr = first.Where(x => !second.Contains(x)).ToArray();

Находит пересечение множеств, представленных двумя последовательностями

int[] arr = first.Intersect(second).ToArray();

Проецирует матрицу в последовательность

var tmp = new List<int>(matrix.GetLength(0)*matrix.GetLength(1)); 
foreach (int x in matrix) 
    tmp.Add(x); int[] arr = tmp.ToArray();

Находит объединение множеств, представленных двумя последовательностями

int[] arr = first.Union(second).ToArray();

SQL

SELECT

 

SELECT - оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию.

вернёт все столбцы всех строк данной таблицы. Для той же таблицы запрос

SELECT * FROM T;

вернёт те же строки, что и первый, однако результат будет отсортирован в обратном порядке (Z-A) из-за использования ключевого слова ORDER BY с полем C1 в качестве поля сортировки

SELECT * FROM T ORDER BY C1 DESC;

DESC – обратный порядок (последний элемент будет 1 в списке)

ASC – сортировать от первого элемента к последнему (1 элемент будет первым в списке)

Отбирает все строки где поле column_name равен одному из перечисленных значений value1,value2,…

SELECT * 
FROM TABLE_NAME 
WHERE column_name IN (value1,value2,...)

INSERT

Используя перечисление значений, с указанием столбцов:

INSERT INTO <название таблицы> ([<Имя столбца>, ... ]) VALUES (<Значение>,...)

Используя перечисление значений, без указания столбцов:

INSERT INTO <название таблицы> VALUES (<Значение>,...)

Используя select:

INSERT INTO <название таблицы> SELECT <имя столбца>,... FROM <название таблицы>
// В этом  случае, в таблицу может вставиться более одной записи. Если в таблице есть
// другие поля требующие заполнения, но не указанные в операторе insert, для них будет
// установлено значение по умолчанию, либо null, если значение по умолчанию не указано.

Пример запроса

INSERT INTO EMPSAMP (NAME, SALARY, DEPTNO, LEVEL) VALUES(’Mary Smith’, 35000.00, 11, ’Associate’)

UPDATE

Пример

UPDATE per­sons SET street = 'Nis­sesti­en 67', ci­ty = 'Sand­nes' WHERE lastname = 'Tjes­sem' AND firs­tna­me = 'Ja­kob'

DELETE

Синтаксис

DELETE FROM <Имя Таблицы> WHERE <Условие отбора записей>

 

Комментарии:

Пожалуйста авторизируйтесь, чтобы получить возможность оставлять комментарии