Linq用于方便用户操作集合对象而定义的扩展方法,这些扩展方法是LINQ的查询操作符。
扩展方法包括:Where,Max,Select,Sum,Any,Average,All,Concat等
简单用法:from v in arr where v > 3 select v
// from [type] id in source
type为可选,id是集合中一项目,source表示一个集合,如果集合中的类型与type指定的类型不同则导致强制类型转化
// [join [type] id in source on expr equals expr [into subGroup]]
一个查询表达式中可以有0个或多个join子句,这里的source可以是一个全新的集合,可以不等于第一句中的source
expr可以是一个表达式
[into subGroup] subGroup是一个中间变量,它继承自IGrouping,代表一个分组,也就是说“一对多”里的“多”
一个查询表达式中可以有1个或多个from子句
一个查询表达式必须以select或者group by结束
扩展方法包括:Where,Max,Select,Sum,Any,Average,All,Concat等
简单用法:from v in arr where v > 3 select v
// from [type] id in source
type为可选,id是集合中一项目,source表示一个集合,如果集合中的类型与type指定的类型不同则导致强制类型转化
// [join [type] id in source on expr equals expr [into subGroup]]
一个查询表达式中可以有0个或多个join子句,这里的source可以是一个全新的集合,可以不等于第一句中的source
expr可以是一个表达式
[into subGroup] subGroup是一个中间变量,它继承自IGrouping,代表一个分组,也就是说“一对多”里的“多”
可以通过这个变量得到这一组包含的对象个数,以及这一组对象的键
// [from [type] id in source | let id = expr | where condition]一个查询表达式中可以有1个或多个from子句
一个查询表达式中可以有0个或多个let子句,let子句可以创建一个临时变量
from u in users
let number = Int32.Parse(u.Username)
where u.ID < 9 && number % 2 == 0 select u
//
[orderby ordering,ordering,ordering...]
排序
from p in db.Products
group p by p.CategoryID into g
// select expr | group expr by key
一个查询表达式必须以select或者group by结束
select后跟要检索的内容
// [into id query]
将前面语句的结果作为后面语句操作的数据源 相当于sql中的as,创建一个临时存储器,可以存储group或者select等子句的结果
from p in db.Employees
select new
{
LastName = p.LastName,
TitleOfCourtesy = p.TitleOfCourtesy
} into EmployeesList
orderby EmployeesList.TitleOfCourtesy ascending
select EmployeesList;
1、简单数组用法
public void LinqTest()
{
List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 8, 9, 10 };
//where使用
List<int> arr_result = arr.Where(a => { return a % 2 == 0; }).ToList();
//from用法,order by 默认的排序方式为升序(ascending),降序为:descending.
List<int> arr_result1 = (from v in arr where v > 3 orderby v ascending select v).ToList();
//也可以调用其它方法
List<int> arr_result2 = (from v in arr where CheckNum(v) select v).ToList();
//也可以多次嵌套查询
List<int> arr_result3 = (from v in
(from v_in in arr where v_in > 3 select v_in)
select v).ToList();
}
//外部方法
static bool CheckNum(int temp)
{
if (temp > 2 && temp < 5) { return true; }
else
return false;
}
2、简单对象用法
public class UserInfo
{
public string name { get; set; }
public int id { get; set; }
public float salary { get; set; }
}
public void LinqTest2()
{
List<UserInfo> users1 = new List<UserInfo>();
List<UserInfo> users2 = new List<UserInfo>();
for (int i = 0; i < 10; i++)
{
users1.Add(new UserInfo { name = "username" + i.ToString(), id = i, salary = i * 1000 });
users2.Add(new UserInfo { name = "username" + i.ToString(), id = i, salary = i * 1000 });
}
//获取的是一个int类型的可枚举集合
//select子句决定了获取的数据的类型,user.salary * 0.9为获取的值
var valid_salarys = from user in users1 select user.salary * 0.9;
//多个类from查询
var valid_salarys2 = from user1 in users1
from user2 in users2
where user1.salary > 1000 && user2.id == user1.id
select user1.salary * 0.9;
foreach (var varlid_salary in valid_salarys)
{
//this.TextBox1.Text = this.TextBox1.Text + "," + varlid_salary;
}
}
3、LIST只取其中一个字段列,并去重复
List<YJZH_SCRWBM> rwList
//只保留一列,并去掉重复项
List<string> jdbmList = rwList.Select(x => x.JDBM).Distinct().ToList();