1、LINQ查询语句有两种LINQ Query和LINQ Method
2、使用LINQ语句获取的变量用var,是一个动态变量。
3、LINQ语句适用的范围
- XML 文档:LINQ to XML
- ADO.NET 实体框架:LINQ to Entities
- .NET 集合、文件、字符串等:LINQ to objects
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
List<Car> myCars = new List<Car> {
new Car(){VIN="A1",Make="BMW",Model="550I",StickerPrice=55000,Year=2012},
new Car (){VIN="A2",Make="Toyota",Model="4Runner",StickerPrice=35000,Year=2013},
new Car (){VIN="A3",Make="BMW",Model="745li",StickerPrice=75000,Year=2019},
new Car (){VIN="A4",Make="Ford",Model="Escape",StickerPrice=25000,Year=2019},
new Car (){VIN="A5",Make="BMW",Model="55i",StickerPrice=57000,Year=2010}
};
//LINQ query
var bwmsQuery = from car in myCars
where car.Make == "BMW"
&& car .Year ==2012
select car;
foreach (var car in bwmsQuery)
{
Console.WriteLine("bwmsQuery{0} {1}", car.Model, car.VIN);
}
var orderedCars = from car in myCars
orderby car.Year descending
select car;
foreach (var car in orderedCars)
{
Console.WriteLine("orderedCars {0} {1}",car .Year,car .VIN);
}
var newCars = from car in myCars
where car.Make == "BMW"
&& car.Year == 2012
select new { car.Make, car.Model };
//LINQ method
var bmwsMethod = myCars.Where(p => p.Make == "BMW" && p.Year == 2012);
foreach (var car in bmwsMethod)
{
Console.WriteLine("bmwsMethodResult {0} {1}", car.Model, car.VIN);
}
var orderedCarsMethod = myCars.OrderBy(p => p.Year); //升序排列
var orderedByDescending = myCars.OrderByDescending(p => p.Year);//降序排列
foreach (var car in orderedByDescending)
{
Console.WriteLine("orderedCarsMethod {0} {1}", car.Year, car.VIN);
}
//找到筛选的第一个
var firstBMW = myCars.First(p => p.Make == "BMW");
Console.WriteLine(firstBMW.VIN);
var firstBMW2 = myCars.OrderByDescending(p => p.Year).First(p => p.Make == "BMW");
Console.WriteLine(firstBMW2.VIN);
myCars.ForEach(p => p.StickerPrice -= 3000);
myCars.ForEach(p => Console.WriteLine("{0} {1:C}", p.VIN, p.StickerPrice));
Console.WriteLine(myCars.Exists(p=>p.Model=="4323I"));
Console.WriteLine(myCars .Sum(p=>p.StickerPrice));
}
}
class Car
{
public string VIN { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public int StickerPrice { get; set; }
public int Year { get; set; }
}
}
Linq to DataSet 基础语法,对DataTable的操作
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace linq_02_DataSet
{
class Program
{
static void Main(string[] args)
{
DataSet ds = BuidDaSet();//获得数据集
DataTable dt = ds.Tables[0];//获得数据表
//查询表中所有记录
var query1 = from p1 in dt.AsEnumerable()
select p1;
Console.WriteLine("======query1========");
foreach (var item in query1)
{
Console.WriteLine("姓名:{0} 性别:{1} 年龄:{2}",item.Field<string>("Name"),item.Field<string>("Sex"),item.Field<int>("Age"));
// Console.WriteLine($"姓名:{item["Name"]} " + $"性别:{item["Sex"]} " + $"年龄:{item["Age"]}");
}
//查询所有人员
var query2 = from p1 in dt.AsEnumerable()
select p1["Name"];
Console.WriteLine("======query2========");
foreach (var item in query2)
{
Console.WriteLine(item);
}
//指定条件查询,年龄大于23并排序
var query3 = from p1 in dt.AsEnumerable()
where p1.Field<int>("Age") > 23
orderby p1["Age"]
select p1;
Console.WriteLine("======query3========");
foreach (var item in query3)
{
Console.WriteLine($"姓名:{item["Name"]} " + $"性别:{item["Sex"]} " + $"年龄:{item["Age"]}");
}
//指定条件查询,年龄大于20小于25的同学
var query4 = from p1 in dt.AsEnumerable()
where p1.Field<int>("Age") > 20
where p1.Field<int>("Age") < 25
orderby p1["Age"] descending
select p1;
Console.WriteLine("======query4========");
foreach (var item in query4)
{
Console.WriteLine($"姓名:{item["Name"]} " + $"性别:{item["Sex"]} " + $"年龄:{item["Age"]}");
}
Console.ReadKey();
}
//内存中的Dataset数据集
private static DataSet BuidDaSet()
{
string[] nameStr = { "张三", "李四", "王武", "小红", "丽丽", "小白" };
string[] Sex = { "男", "男", "男", "女", "女", "女" };
int[] Age = { 21, 19, 22, 24, 29, 25 };
DataSet ds = new DataSet();//准备ds对象
DataTable dt = new DataTable();//数据表对象
ds.Tables.Add(dt);//把数据表添加到数据集中
//创建数据表结果:三列 姓名,性别,年龄
dt.Columns.AddRange(
new DataColumn[]
{
new DataColumn("Name",Type.GetType("System.String")),
new DataColumn("Sex",Type.GetType("System.String")),
new DataColumn("Age",Type.GetType("System.Int32")),
}
);
//把数组数据放入数据表中
for (int i = 0; i < nameStr.Length; i++)
{
//根据编号,新建数据表中的一行,产生一行数据
DataRow row = dt.NewRow();
row["Name"] = nameStr[i];
row["Sex"] = Sex[i];
row["Age"] = Age[i];
dt.Rows.Add(row);//把新建行数据添加到表的集合中
}
return ds;//返回数据集
}
}
}