Concat
jest odpowiednikiem LINQ z UNION ALL
SQL.
Skonfigurowałem prosty przykład w LINQPad, aby pokazać, jak używać Union
i Concat
. Jeśli nie masz LINQPad, pobierz.
Aby móc zobaczyć różne wyniki dla tych operacji zestaw, pierwszy i drugi zestaw danych musi mieć co najmniej pewne nakładanie. W poniższym przykładzie oba zestawy zawierają słowo "nie".
Otwórz LINQPad i ustaw rozwijaną listę języków na oświadczenia w języku C#. Wklej następujące zapytanie do okienka i uruchom go:
string[] jedi = { "These", "are", "not" };
string[] mindtrick = { "not", "the", "droids..." };
// Union of jedi with mindtrick
var union =
(from word in jedi select word).Union
(from word in mindtrick select word);
// Print each word in union
union.Dump("Union");
// Result: (Note that "not" only appears once)
// These are not the droids...
// Concat of jedi with mindtrick (equivalent of UNION ALL)
var unionAll =
(from word in jedi select word).Concat
(from word in mindtrick select word);
// Print each word in unionAll
unionAll.Dump("Concat");
// Result: (Note that "not" appears twice; once from each dataset)
// These are not not the droids...
// Note that union is the equivalent of .Concat.Distinct
var concatDistinct =
(from word in jedi select word).Concat
(from word in mindtrick select word).Distinct();
// Print each word in concatDistinct
concatDistinct.Dump("Concat.Distinct");
// Result: (same as Union; "not" only appears once)
// These are not the droids...
Wynik w LINQPad wygląda następująco:
należy zaznaczyć odpowiedź Jon Crowell jako „zaakceptowane” – arviman