C# LINQ查询表达式及对应LAMBDA表达式的用法
什么是LINQ?
LINQ全称“Language Integrated Query”,是指将查询语言与C#或VB .NET等 .NET语言无缝集成起来,在编写.NET应用程序时通过添加查询功能支持,使得用户可以查询各种数据源。
LINQ查询表达式
LINQ查询表达式是一种特殊的C#表达式,旨在帮助用户对对象集合进行查询和筛选。LINQ查询表达式使用“查询关键字”指导查询。
基本语法
查询关键字包括:from、where、select、group by、order by、join、let、等等。
以一个字符串列表为例进行查询:
List<string> list = new List<string>() { "Hello", "World", "LINQ", "C#", "Visual", "Studio" };
var result = from s in list
where s.Contains("o")
select s;
以上代码的解释如下:
- from子句:声明一个范围变量s,其范围为当前查询的数据源。
- where子句:筛选数据源,只保留包含字母o的字符串。
- select子句:指定查询结果,返回所有符合条件的字符串。
常用操作
1.过滤操作
使用where关键字进行过滤操作:
var result = from s in list
where s.StartsWith("V")
select s;
以上代码的意思是从list
中筛选出所有以字母V
开头的字符串。
2.投影操作
使用select关键字进行投影操作:
var result = from s in list
select s.ToUpper();
以上代码的意思是将list
中所有字符串转换为大写后返回。
3.分组操作
使用group by关键字进行分组操作:
var result = from s in list
group s by s.Length into g
select new { Length = g.Key, Words = g.Count() };
以上代码的意思是按字符串长度进行分组,返回每个长度有多少字符串组成。
LAMBDA表达式的用法
LAMBDA表达式是一种匿名函数,其基本语法为:
(parameters) => expression
其中parameters
表示输入参数,expression
表示函数体。
使用LAMBDA表达式对上述LINQ查询表达式进行改写:
var result = list.Where(s => s.Contains("o"));
以上代码的意思与之前的查询表达式相同:从list
中筛选出所有包含字母o
的字符串。
使用LAMBDA表达式对分组操作进行改写:
var result = list.GroupBy(s => s.Length)
.Select(g => new { Length = g.Key, Words = g.Count() });
以上代码的意思与之前的分组操作相同:按字符串长度分组,返回每个长度有多少字符串组成。
示例
下面是一个完整的示例代码,包括LINQ查询表达式
和LAMBDA表达式
两种写法:
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQDemo
{
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>() { "Hello", "World", "LINQ", "C#", "Visual", "Studio" };
// LINQ查询表达式
var result1 = from s in list
where s.Contains("o")
select s;
// LAMBDA表达式
var result2 = list.Where(s => s.Contains("o"));
// 输出结果
Console.WriteLine("查询包含字母o的字符串:");
foreach(var s in result1)
{
Console.WriteLine(s);
}
Console.WriteLine("使用LAMBDA表达式查询包含字母o的字符串:");
foreach(var s in result2)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
}
}
总结
通过LINQ查询表达式和LAMBDA表达式,可以实现对各种数据源的查询和筛选操作。LINQ查询表达式使用查询关键字进行指导,LAMBDA表达式则可以使代码更加简洁、易读。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# LINQ查询表达式及对应LAMBDA表达式的用法 - Python技术站