Linq(Language Intergarted Query)是对数据查询操作的语句
使用Linq语句可以对查询语句里字符串进行检查
使用Linq语句查询的要求:实现了IEnumerable接口
class Program
{
static void Main(string[] args)
{
int[] number = {10,8,20,44,1, 23, 13, 4, 65, 6};
//LINQ的查询语法
var set = from i in number
where i%2 == 0
orderby i
select i;
foreach (var j in set)
{
Console.WriteLine(j);
}
Console.WriteLine("Method LINQ Query:");
//C#方法型LINQ语句
var bigger = number.Where(x =>x>10).OrderByDescending(x=>x).First();
Console.WriteLine(bigger);
}
}
LINQ的query语法三步骤:
1.数据源(数据源要求实现了IEnumerable接口的对象)
2.查询语句
3.执行(使用foreachb遍历或调用count()等方法)
public class student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class electiveGrade
{
public int stuId { get; set; }
public string courseName { get; set; }
public double grade { get; set; }
}
static void Main(string[] args)
{
//创建数据源
List<student>students=new List<student>();
students.Add(new student() {Id = 1,Name = "John",Age = 19});
students.Add(new student() { Id = 2, Name = "Jim", Age = 18 });
students.Add(new student() { Id = 3, Name = "Tom", Age = 19 });
students.Add(new student() { Id = 4, Name = "Liutao", Age = 22 });
//编写查询语句
var query1 = from stu in students
group stu by stu.Age;
//使用group对要查询的语句进行分组,查询出来的结果按年龄分成一组
foreach (var i in query1)
{
foreach (var VARIABLE in i)
{
Console.Write("{0} {1} {2} ",VARIABLE.Id,VARIABLE.Name,VARIABLE.Age);
Console.WriteLine();
}
}
Console.WriteLine();
List<electiveGrade>electiveGrades=new List<electiveGrade>();
electiveGrades.Add(new electiveGrade() {courseName = "高等数学",grade = 99,stuId = 1});
electiveGrades.Add(new electiveGrade() { courseName = "高等数学", grade = 59, stuId = 2 });
electiveGrades.Add(new electiveGrade() { courseName = "高等数学", grade = 42, stuId = 11 });
electiveGrades.Add(new electiveGrade() { courseName = "高等数学", grade = 75, stuId = 4 })
//join用于连接两个不同的数据源对象,其作用类似于数据库里表间连接操作
var connect = from score in electiveGrades
join stu in students on score.stuId equals stu.Id
select new
{stuGrade=score.grade,stuID=stu.Id,stuName=stu.Name,stuAge=stu.Age};
foreach (var index in connect)
{
Console.Write("{0} {1} {2} {3}",
index.stuID,index.stuName,index.stuGrade,index.stuAge);
Console.WriteLine();
}
}
此外还有let、into关键字。
可以用into关键字对分组得到的结果做临时的打包用于再次过滤;
let关键字的作用类似于定义一个中间变量
例:
string[] set={"Hello world ! Welcome to learn Linq","Thank You"};
var res=from str in set
let words=str.Spilt(" ")
from word in words
let w=word.Tolower()
select w;
words为分割出来的字符串集合,下面再把words作为一个集合把大写字符转换为小写。