1.Action委托 接收参数 无返回值
#region 8.0.1 Action委托 接收参数 无返回值
public static void C0801Action()
{
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
//遍历打印
list.ForEach(fe);
//利用匿名函数
list.ForEach(delegate (int i) { Console.WriteLine(i.ToString()); });
//利用lambda表达式打印
list.ForEach(i => Console.WriteLine(i));
}
private static void fe(int obj)
{
Console.WriteLine(obj.ToString());
}
#endregion
2.Predicate 泛型委托:接收一个参数,返回bool类型
static void C0802Predicate()
{
var list = GetPigeList();
list.FindAll(c => c.Age > 100);
//有多个返回第一个
var pig = list.Find(c => c.Name == "小猪");
}
3.func:接收参数,返回参数,但不固定
static void C0802Func()
{
var list = GetPigeList();
//list中年龄大于一的猪
list.Where(c => c.Age > 1).ToList().ForEach(i => Console.WriteLine(i.ToString1()));
}
4.Comparison返回一个整数,接收两个同类型的参数
#region Comparison<T>返回一个整数,接收两个同类型的参数
static void C0804Comparison()
{
var list = GetPigeList();
//原始的
list.Sort(Query1);
//匿名委托
list.Sort(delegate (Pig p, Pig n) { return n.Age - p.Age; });
//按年龄倒叙排列
list.Sort((p, n) => n.Age - p.Age);
list.ForEach(i => Console.WriteLine(i.ToString1()));
}
static int Query1(Pig p, Pig n)
{
return n.Age - p.Age;
}
#endregion
5.SQO方法-标准查询运算符
#region SQO方法-标准查询运算符
static void C0901Where()
{
var list = GetPigeList();
//age>5||Name=""
list.Where(c => c.Age > 5 || c.Name == "小猪").ToList().ForEach(c => Console.WriteLine(c.ToString1()));
//FirstOrDefault演示
list.FirstOrDefault(c => c.Age > 5 || c.Name == "小猪");
list.LastOrDefault(c => c.Age > 5 || c.Name == "小猪");
}
//对集合进行排序
static void C0902Sort()
{
var list = GetPigeList();
//正序
list.OrderBy(c => c.Age).ToList().ForEach(i => Console.WriteLine(i.ToString1()));
//正序
list.OrderByDescending(c => c.Age).ToList().ForEach(i => Console.WriteLine(i.ToString1()));
//根据最后一个排序
list.OrderByDescending(c => c.Age).OrderByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString1()));
//后面的组合排序用ThenBy
list.OrderByDescending(c => c.Age).ThenByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString1()));
}
//投影方法
static void C0904Select()
{
var list = GetPigeList();
//将lis中的Name属性的值获取成一个新的集合
List<string> nlist = list.Select(c => c.Name).ToList();
//将lis中的Name和Age属性的值获取成一个新的集合,匿名类
list.Select(c => new { c.Name, c.Age }).ToList().ForEach(c => Console.WriteLine(c.Name + ":" + c.Age));
nlist.ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion
6.分页方法Skip(skipNum).take(页容量)
static void C0905Page()
{
int rowCount = 0;
C0905ByPage(1, 2, out rowCount);
}
static List<Pig> C0905ByPage(int pageIndex, int pageSize, out int rowCount)
{
rowCount = 0;
var list = GetPigeList();
rowCount = list.Count(c => c.Age > 5);
return list.Where(c => c.Age > 5).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
7.链表查询join
static void C0906Join()
{
var piglist = GetPigeList();
var pigTypeList = GetPigeTypeList();
//查找piglist集合中的Name和ID值同时和Typelist的TName的值作为一个新的匿名类集合返回
piglist.Join(pigTypeList, p => p.TypeID, t => t.TypeID, (p, t) => new
{
p.ID,
p.Name,
t.TName
}).ToList().ForEach(c => Console.WriteLine(c.ID + ":" + c.Name + ":" + c.TName));
}
8.分组GroupBy
static void C0907GroupBy()
{
var list = GetPigeList();
//根据TypeID分组
list.GroupBy(c => c.TypeID).ToList().ForEach(c =>
{
//c代表分组以后的每个小组
Console.WriteLine("---分组号" + c.Key);
//g代表每个小组c中的pig对象
c.ToList().ForEach(g => Console.WriteLine(g.ToString1()));
});
}
9.Linq
static void C1001Where()
{
var list = GetPigeList();
var nlist1 = (from c in list where c.Age > 5 select c).ToList();
}
static void C1002Sort()
{
var list = GetPigeList();
var orderList = (from c in list orderby c.Age descending select new { c.Name,c.Age}).ToList();
}
static void C1003LinqJoin()
{
var piglist = GetPigeList();
var pigTypeList = GetPigeTypeList();
var nlist = (from c in piglist
join t in pigTypeList
on c.TypeID equals t.TypeID
select new { c.Name, c.ID, t.TName }).ToList();
}
static void C1004GroupBy()
{
var list = GetPigeList();
(from c in list group c by c.TypeID).ToList();
}
准备两个集合,两个类,和一个扩展方法
public static List<Pig> GetPigeList()
{
return new List<Pig>
{
new Pig() {TypeID=1,ID=1,Name="八戒",Age=500 },
new Pig() {TypeID=2,ID=2,Name="八戒1",Age=5 },
new Pig() {TypeID=3,ID=3,Name="小猪",Age=1 },
new Pig() {TypeID=2,ID=4,Name="老猪",Age=5},
};
}
public static List<PigType> GetPigeTypeList()
{
return new List<PigType>
{
new PigType() {TypeID=1,TName="土猪" },
new PigType() {TypeID=2,TName="野猪" },
new PigType() {TypeID=3,TName="家猪" }
};
}
public class Pig
{
public int TypeID { get; set; }
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class PigType
{
public int TypeID { get; set; }
public string TName { get; set; }
}
public static class ExPig
{
public static string ToString1(this Pig pig)
{
return "猪ID:" + pig.ID + " 猪名:" + pig.Name + " 猪龄:" + pig.Age;
}
}