c# – 如何访问LINQ查询结果中的特定数据?

我知道,这对你们来说非常简单.
请考虑以下代码

string[] str = { "dataReader","dataTable","gridView","textBox","bool" };

            var s = from n in str
                    where n.StartsWith("data")
                    select n;

            foreach (var x in s)
            {
                Console.WriteLine(x.ToString());
            }
            Console.ReadLine();

据说,它将打印:

dataReader
dataTable

对?

例如,如果我不知道数据,以及查询的结果是什么(但我确定它会返回一些结果),我只想打印查询生成的第二个项目,我的代码应该是什么而不是使用foreach?

这里有像数组索引这样的东西吗?

解决方法

你在找 Enumerable.ElementAt.

var secondMatch = str.Where(item => item.StartsWith("data")) //consider null-test
                     .ElementAt(1); 

Console.WriteLine(secondMatch); //ToString() is redundant

由于它的结果是有效的,所以这将是有效的 – 在第二次匹配(你感兴趣的那个)之后,源序列的枚举将被终止.

如果您发现隐含的保证您的源将包含两个匹配项无效,则可以使用ElementAtOrDefault.

var secondMatch = str.Where(item => item.StartsWith("data"))
                     .ElementAtOrDefault(1); 

if(secondMatch == null) // because default(string) == null
{
   // There are no matches or just a single match..
}
else
{
  // Second match found..
}

你可以在这里使用数组索引,但只有在将结果加载到…数组后才能使用.这当然意味着必须枚举整个源序列并将匹配加载到数组中,所以如果您只对第二场比赛感兴趣,那就有点浪费了.

var secondMatch = str.Where(item => item.StartsWith("data"))
                     .ToArray()[1]; //ElementAt will will work too

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...