Шрифт:
Интервал:
Закладка:
.Except(from c2 in yourCars select c2);
Console.WriteLine("Here is what you don't have, but I do:");
foreach (string s in carDiff)
{
Console.WriteLine(s); // Выводит Yugo.
}
}
Метод Intersect() возвращает результирующий набор, который содержит общие элементы данных в наборе контейнеров. Например, следующий метод возвращает последовательность из Aztec и BMW:
static void DisplayIntersection()
{
List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<string> yourCars = new List<String> { "BMW", "Saab", "Aztec" };
// Получить общие члены.
var carIntersect =
(from c in myCars select c)
.Intersect(from c2 in yourCars select c2);
Console.WriteLine("Here is what we have in common:");
foreach (string s in carIntersect)
{
Console.WriteLine(s); // Выводит Aztec и BMW.
}
}
Метод Union() возвращает результирующий набор, который включает все члены множества запросов LINQ. Подобно любому объединению, даже если общий член встречается более одного раза, повторяющихся значений в результирующем наборе не будет. Следовательно, показанный ниже метод выведет на консоль значения Yugo, Aztec, BMW и Saab:
static void DisplayUnion()
{
List<string> myCars =
new List<string> { "Yugo", "Aztec", "BMW" };
List<string> yourCars =
new List<String> { "BMW", "Saab", "Aztec" };
// Получить объединение двух контейнеров.
var carUnion =
(from c in myCars select c)
.Union(from c2 in yourCars select c2);
Console.WriteLine("Here is everything:");
foreach (string s in carUnion)
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390}){
Console.WriteLine(s); // Выводит все общие члены.
}
}
Наконец, расширяющий метод Concat() возвращает результирующий набор, который является прямой конкатенацией результирующих наборов LINQ. Например, следующий метод выводит на консоль результаты Yugo, Aztec, BMW, Saab и Aztec:
static void DisplayConcat()
{
List<string> myCars =
new List<String> { "Yugo", "Aztec", "BMW" };
List<string> yourCars =
new List<String> { "BMW", "Saab", "Aztec" };
var carConcat =
(from c in myCars select c)
.Concat(from c2 in yourCars select c2);
// Выводит Yugo Aztec BMW BMW Saab Aztec.
foreach (string s in carConcat)
{
Console.WriteLine(s);
}
}
Устранение дубликатов
При вызове расширяющего метода Concat() в результате очень легко получить избыточные элементы, и зачастую это может быть именно тем, что нужно. Однако в других случаях может понадобиться удалить дублированные элементы данных. Для этого необходимо просто вызвать расширяющий метод Distinct():
static void DisplayConcatNoDups()
{
List<string> myCars =
new List<String> { "Yugo", "Aztec", "BMW" };
List<string> yourCars =
new List<String> { "BMW", "Saab", "Aztec" };
var carConcat =
(from c in myCars select c)
.Concat(from c2 in yourCars select c2);
// Выводит Yugo Aztec BMW Saab.
foreach (string s in carConcat.Distinct())
{
Console.WriteLine(s);
}
- Понимание SQL - Мартин Грубер - Базы данных