List<string> words = ["an", "apple", "a", "day"];
var query = from word in words
select word.Substring(0, 1);
foreach (string s in query)
{
Console.WriteLine(s);
}
/* This code produces the following output:
a
a
a
d
*/
以下代码显示了使用方法语法的等效查询:
C#
List<string> words = ["an", "apple", "a", "day"];
var query = words.Select(word => word.Substring(0, 1));
foreach (string s in query)
{
Console.WriteLine(s);
}
/* This code produces the following output:
a
a
a
d
*/
SelectMany
下面的示例使用多个 from 子句来投影字符串列表中每个字符串中的每个单词。
C#
List<string> phrases = ["an apple a day", "the quick brown fox"];
var query = from phrase in phrases
from word in phrase.Split(' ')
select word;
foreach (string s in query)
{
Console.WriteLine(s);
}
/* This code produces the following output:
an
apple
a
day
the
quick
brown
fox
*/
以下代码显示了使用方法语法的等效查询:
C#
List<string> phrases = ["an apple a day", "the quick brown fox"];
var query = phrases.SelectMany(phrases => phrases.Split(' '));
foreach (string s in query)
{
Console.WriteLine(s);
}
/* This code produces the following output:
an
apple
a
day
the
quick
brown
fox
*/
该方法 SelectMany 还可以形成匹配第一个序列中的每个项与第二个序列中的每个项的组合:
C#
var query = from number in numbers
from letter in letters
select (number, letter);
foreach (var item in query)
{
Console.WriteLine(item);
}
以下代码显示了使用方法语法的等效查询:
C#
var method = numbers
.SelectMany(number => letters,
(number, letter) => (number, letter));
foreach (var item in method)
{
Console.WriteLine(item);
}
Zip
Zip 投影运算符有多个重载。 所有 Zip 方法都处理两个或更多可能是异构类型的序列。 前两个重载返回元组,具有来自给定序列的相应位置类型。
请考虑下列集合:
C#
// An int array with 7 elements.
IEnumerable<int> numbers = [1, 2, 3, 4, 5, 6, 7];
// A char array with 6 elements.
IEnumerable<char> letters = ['A', 'B', 'C', 'D', 'E', 'F'];
foreach ((int number, char letter, string em) in numbers.Zip(letters, emoji))
{
Console.WriteLine(
$"Number: {number} is zipped with letter: '{letter}' and emoji: {em}");
}
// This code produces the following output:// Number: 1 is zipped with letter: 'A' and emoji: 🤓// Number: 2 is zipped with letter: 'B' and emoji: 🔥// Number: 3 is zipped with letter: 'C' and emoji: 🎉// Number: 4 is zipped with letter: 'D' and emoji: 👀// Number: 5 is zipped with letter: 'E' and emoji: ⭐// Number: 6 is zipped with letter: 'F' and emoji: 💜
foreach (string result in
numbers.Zip(letters, (number, letter) => $"{number} = {letter} ({(int)letter})"))
{
Console.WriteLine(result);
}
// This code produces the following output:// 1 = A (65)// 2 = B (66)// 3 = C (67)// 4 = D (68)// 5 = E (69)// 6 = F (70)
使用前面的 Zip 重载,指定的函数应用于相应的元素 numbers 和 letter,生成 string 结果的序列。