可能你不知道的 Select 的用法 和提点建议 返回
C#论坛
老数据
1
3250
悬赏:5 飞吻
场景:
很多时候, 我们的实体模型和业务模型,可能的写法是这样的:
// 生成的学生表模型
public class Student{
public int id {get;set;}
public string name {get; set;}
public int classRoom {get; set;}
}
//生成的课程表实体模型
public class Subject{
public int id {get; set;}
public string name{ get;set;}
public int studentId {get;set;}
}
//生成的教室表实体模型
public class Subject{
public int id {get; set;}
public string name{ get;set;}
}
///// 视图模型 /////
一般会有2种写法
public class vStudentSubject{
public Student student {get; set;}
public string classRoomName {get; set;}
public List<Subject> subjects {get; set;}
}
这种比较方便这样使用
List<vStudentSubject> retMd = db.Queryable<Student, Subject, vStudentSuject>((sd, sj, r)=>...)..... //这里省略条件等
.select((sd, sj, r)=> new { sd=sd, sj=sj, r=r})
.toList()
.groupBy(a=>a.sd)
.select(g=>new vStudentSubject{student=g.key, classRoomName=g.First().r.name subjects = g.ToList()})
.ToList();好了,其实另外一种写法是继承
public class vStudentSubject: Student{
public List<Subject> subjects {get; set;}
}这样很多情况非常方便,类似星形模型等(就是实体表里面都是id,名称等属性都是关联其他关系表),非常合适继承的写法
我们不要忘记,还有字符串参数版本的select,不需要你一个一个属性赋值:
List<vStudentSubject> retMd = db.Queryable<Student, Subject, vStudentSuject>((sd, sj, r)=>...)..... //这里省略条件等
.select<vStudentSubject>("sd.*, r.name")
.toList();这里,剩下的就是retMd里面学生和教室名字都会被赋值,剩下课程列表了,课程列表是列表的形式,这里不好处理,因为字符串版本参数的select,返回类型不能动态,只能是返回一个参数T的或者是自己决定返回类型的2个重载,这时候如果需要这个列表,继续下一部查询赋值就好了。但是对于非列表的方式,还是非常方便的。
如果,有一种select,是这样设计的 ISugarQueryable<TResult> Select<TResult>(Expression<Func<T,T2,...,TResult>> express, string select);
可以结合起来,对TResult 属性赋值根据字符串来, 对于T,T2... 的对象的赋值,通过 express来。
另外请教下各位大神们 List<T> 这种 有什么艺术性的写法呢?
热忱回答(1)
-
清风送明月 VIP0
2017/7/29感觉逻辑关系和代码都有点乱 -.-^-.-
0 回复