在C#中,LINQ (Language Integrated Query) 提供了一系列的查询元素运算符,这些运算符可以用于从序列中检索特定的元素。这些运算符包括但不限于 First
、FirstOrDefault
、Single
、SingleOrDefault
、Last
、LastOrDefault
、ElementAt
和 ElementAtOrDefault
。
操作 | 描述 |
---|---|
ElementAt | 返回一个特定的索引中的一个元素存在于一个集合 |
ElementAtOrDefault | 相同于ElementAt,它也将返回默认值,特定索引超出范围返回默认值 |
First | 检索的集合或第一元件满足特定的条件中的第一个元素 |
FirstOrDefault | 相同First除了返回一个默认值没有存在这样的元素 |
Last | 检索最后一个出现在集合或最后一个元素的元素满足特定条件 |
LastOrDefault | 相同Last除了返回一个默认值没有存在任何这样的元素 |
Single | 返回集合的唯一元素或唯一元素满足一定条件 |
SingleOrDefault | 相同单除了它也返回一个默认值,如果没有存在任何这样的唯一元素 |
DefaultIfEmpty | 返回默认值,如果集合或列表为空或null |
C#private void btnSearch_Click(object sender, EventArgs e)
{
List<Hero> heroes = new List<Hero>
{
new Hero("张飞",38,100,"蜀"),
new Hero("刘备",40,101,"蜀"),
new Hero("关羽",39,102,"蜀"),
new Hero("曹操",45,103,"魏"),
new Hero("孙权",31,104,"吴"),
new Hero("黄忠",45,105,"蜀"),
new Hero("夏侯惇",45,106,"魏")
};
var ret=heroes.ElementAt(new Random().Next(0, heroes.Count));
MessageBox.Show(ret.Name);
}
ArgumentOutOfRangeException
。C#private void btnSearch_Click(object sender, EventArgs e)
{
List<Hero> heroes = new List<Hero>
{
new Hero("张飞",38,100,"蜀"),
new Hero("刘备",40,101,"蜀"),
new Hero("关羽",39,102,"蜀"),
new Hero("曹操",45,103,"魏"),
new Hero("孙权",31,104,"吴"),
new Hero("黄忠",45,105,"蜀"),
new Hero("夏侯惇",45,106,"魏")
};
var ret = heroes.First(x => x.Age > 40);//找到大小40岁的第一个人
MessageBox.Show(ret.Name);
}
InvalidOperationException
。null
,对于值类型为其默认值)。C#private void btnSearch_Click(object sender, EventArgs e)
{
List<Hero> heroes = new List<Hero>
{
new Hero("张飞",38,100,"蜀"),
new Hero("刘备",40,101,"蜀"),
new Hero("关羽",39,102,"蜀"),
new Hero("曹操",45,103,"魏"),
new Hero("孙权",31,104,"吴"),
new Hero("黄忠",45,105,"蜀"),
new Hero("夏侯惇",45,106,"魏")
};
var ret = heroes.Last(x => x.Age > 40);//找到大小40岁的第后一个人
MessageBox.Show(ret.Name);
}
InvalidOperationException
。C#private void btnSearch_Click(object sender, EventArgs e)
{
List<Hero> heroes = new List<Hero>
{
new Hero("张飞",38,100,"蜀"),
new Hero("刘备",40,101,"蜀"),
new Hero("关羽",39,102,"蜀"),
new Hero("曹操",45,103,"魏"),
new Hero("孙权",31,104,"吴"),
new Hero("黄忠",45,105,"蜀"),
new Hero("夏侯惇",45,106,"魏")
};
var ret = heroes.Single(x => x.HeroNo==104);//如果找到多个会报错
MessageBox.Show(ret.Name);
}
Single
和 SingleOrDefault
,在使用时要确保序列中的元素数量符合预期,以避免运行时错误。LINQ查询元素运算符为从集合中检索数据提供了强大而灵活的手段,使得数据访问更加直观和方便。
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!