一、数据类型
1.var (匿名类型)弱类型
可以自动检测数据类型;
2.匿名类型对象 (对象初始化)
Person p = new Person{Id=1,Name="aaaa"}
3.lanbda 表达式 基础使用用法
// 委托是把一个方法作为一个参数传递给另一个方法
委托
// 无餐无返的委托
public delegate void MyDelegate1();
/*************************************************************/
// 有餐无返的委托
public delegate void MyDelegate2(int i);
// 有餐返回是 boolean 类型
public delegate void MyDelegate3(int i);
// 静态方法
static void Show()
{
Console.WriteLine("Show");
}
// Main 方法里写
static void Main(string[] args)
{
// 无餐写法
MyDelegate1 del = ()=>
{
Console.WriteLine("这是我的 del 方法。")
}
// 调用输出
del();
输出结果: 这是我的 del 方法。
// 有参数无返回值
MyDelegate2 del2 = (a)=>
{
Console.WriteLine("del 方法"+a);
}
// 调用输出
del2(12);
输出结果: del 方法12
********************************************************
// 有参返回是 bool 结果
MyDelegate3 del3 = (a)=> a>12;
********************************************************
// 微软提供的 Action 委托 有 16 中重载方法 共有 16 参数。
使用方式:
// 无返回值
Action a = (a)=>{Console.WriteLine("Hello");}
// 有返回值
Action <int,string> a1 = (b1,b2)=>
{
Console.WriteLine("Hello"+a1);
}
List<int> list = new List<int>();
// 原生写法
list.Where((num)=>{return num>12;})
// 简写
list.Where(m=>m>12);
}
// 微软提供的 Action 委托 有 16 中重载方法 共有 16 参数。
使用方式:
// 无返回值
Action a = (a) => { Console.WriteLine("Hello"); }
// 有返回值
Action<int, string> a1 = (b1, b2) =>
{
Console.WriteLine("Hello" + a1);
}
List<int> list = new List<int>();
// 原生写法
list.Where((num) => { return num > 12; })
// 简写
list.Where(m => m > 12);
集合常用的方法:
Any():判断集合是否包含元素。
Distinct():去除重复数据。
排序:指定的列排序
升序(list.OrderBy(m => m.Id))
降序(list.OrderByDescending(m => m.Id))
注意:在 EF 里使用 skip 和 Take 分页。必须排序。list 集合里不用。
Skip(int i): 跳过 n 条数。 Take(int i):每页显示 n 条数据。
Except(): 排除集合中的数据。原集合数据不变。
Union(): 把集合中的数据联合到另一个集合中。原集合数据不变。
分组:常用的五个聚合函数 // 方便统计数据。
sum:求和 count:总数 max:最大值 min:最小值 avg:平均分
分组的作用:方便统计数据。
SelectMany: 把集合中的对象拼接到另一个集合中。具体百度一下。
Jon(): 链表。
示例用法:
// 表一
public class Tab1
{
public int Tab1Id { get; set; }
public string Name { get; set; }
}
// 表二
public class Tab2
{
public int Tab2Id { get; set; }
public string Tab2Name { get; set; }
public int Tab1Id { get; set; }
}
List<Tab1> tab1 = new List<Tab1>
{
new Tab1{Tab1=1,Name="班级1"},
new Tab1{Tab1=2,Name="班级2"},
new Tab1{Tab1=3,Name="班级3"}
}
List<Tab2> tab2 = new List<Tab2>
{
new Tab2{Tab2Id=1,Tab2Name="张三1",Tab1Id=1},
new Tab2{Tab2Id=2,Tab2Name="张三2",Tab1Id=1},
new Tab2{Tab2Id=3,Tab2Name="张三3",Tab1Id=1},
new Tab2{Tab2Id=4,Tab2Name="张三4",Tab1Id=1},
new Tab2{Tab2Id=5,Tab2Name="张三5",Tab1Id=1},
new Tab2{Tab2Id=6,Tab2Name="张三6",Tab1Id=1}
};
链接:
// 接收 链接好的数据
var result = tab2.Where(tab2, t2 => t2.Tab1Id, (t1, t2) => new { t1.Name, t2.Tab2Name });
// 输出链表结果
foreach (var item in result)
{
Console.WriteLine(item.Name + " " + item.Tab2Name);
}
linq(): 跟 lanbda 没什么区别
// lanbda 写法结果
foreach (var item in list.Where(m => m.Id == 6))
{
Console.WriteLine(item.Id);
}
// linq 写法 比 lanbda 可读性强
var data = from tab1 in list where tab1.Tab1Id < 6 select tab1;
// linq 写法输出结果
foreach (var stu in data)
{
Console.WriteLine(stu.Id);
}
lanbda 与 linq 结合使用
先写 linq 在写点括起来 使用。
开发中的调试小技巧:// 在开发中不起作用。
public override string ToString()
{
return $"id:{Id} name:{Name}";
}