
@Tomato
.NET小结
目录
文章目录Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作。并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。
eg:
要求:查询是否存在名字为“张三”的学生。(你的代码会怎样写呢?)
第一种?第二种?第三种?让我们来对比一下这三个语句的性能。
要求:查询所有一年级里面姓名为“张三”的学生。(班级 1对多>> 学生)
// 1.查询一年级班级,然后循环查出里面姓名为张三的学生
var claList=this.classService.List(new cla(){age=1});
foreach(var item in claList)
{
selList=this.stuService.List(new stu(){name='张三',stuID=item.stuID});
.......
}
// 2.上面循环多次打开数据连接,吃数据库,占时间,接口反应慢
// 优化==> 先查出所有符合条件的班级和学生,然后通过内存去比对
var claList=this.classService.List(new cla(){age=1});
var stuList=this.stuService.List(new stu(){name='张三'});
foreach(var item in claList)
{
selList=stuList.FindFirst(x=>x.claID==item.claID);
.......
}
// 3.上面操作过于繁琐,且数据量大的情况下依旧不太客观
// 直接编写SQL
QueryStu(){
stringbu.....="sel stu inner join cla ....";
if (start.age!= end.Year)
if (!string.IsNullOrWhiteSpace(this.name))
{
sb.Append(" AND name like @name");
paramList.Add(new SqlParameter("@name", "%" + this.name+ "%"));
}
}
// 4.拼接sql繁琐,易出错,且容错率低,可维护性较差
// 查询新建学生内联视图,新建ViewModel,映射视图字段查询
sql: create view ....
var selList=this.stuService.ListView(new stuView(){name='张三',claAge=1});
private static ListFormatGroupTree(List selModelViewList) { if (selModelViewList == null || selModelViewList.Count == 0) { return null; } List > groupListData = selModelViewList.Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Value.ModelGroupName) .Select(x => x.Select(v => v.Value).ToList()) .ToList(); selModelViewList = new List
(); foreach (List item in groupListData) { ModelViewModel tempModel = new ModelViewModel(); tempModel = item[0]; tempModel.Child = DynamicTableHelper.CreateDeepCopy >(item).OrderByDescending(x => x.OrderNum).ToList(); selModelViewList.Add(tempModel); } return selModelViewList; }