发布网友 发布时间:2022-04-08 02:37
共2个回答
热心网友 时间:2022-04-08 04:06
DataTable是原始ADO.net对象,比较简单,弊端是数据没法保留原始类型,在前端绑定时需要转换类型,也没法直接打“.”来调用成员产,简言之,不符合面向对象特征。
所以就有了ORM,对象关系映射,以实现数据表记录本身通常就可以用一个类来描述。一般用LINQ to SQL或EF来实现,如果没有做映射,纯粹手动编写类来描述数据对象,就是所谓的POCO,要做的工作多些,比如从数据库读取数据后手动将表内所有记录实例化为事先定义好的类中,再放入集合,这样在前端打"."即可调用成员,也无需再次转换类型!!
那么问题来了:你的学长让你返回List<>的目的就是希望你返回强类型的对象集合,以便前端更简便调用,以替代你之前返回的DataTable.
但是这个方法的问题就在Object把你辛苦转换好的强类型对象实例又打回原型了,因为再拿出来的时候,还需要再次转换,这就涉及到装箱拆箱,极大影响性能,违背初衷!
解决办法:
必须有合理的实体层(模型层)针对数据库映射,你可选择LINQ to SQL,LinQ to EF来实现,也可以手动写,该实体层必须合理处理好数据关系映射
2.尽量避免无必要的装拆箱,简言之不要在任何类型与object间来回转换,具体概念你百度一下就有
3.使用合理返回类型如:List<Course>
例:
class Course
{
public int ID;
public string Title;
public List<Student> Students;
...
}
class Student
{
public int ID;
public string Name;
...
}
追问谢谢您的耐心指导!
热心网友 时间:2022-04-08 05:24
public List<Object[]> SelectUserByCno(String Cno)追答DataTable 的格式大致是这样的:
----------------------------------------------
课程 选课人信息1 选课人信息2 ……
----------------------------------------------
高数 xxxxx xxxxx
高数 yyyy yyyyy
高数 zzzz zzzzz
…… …… ……
----------------------------------------------
第一个字段是课程。所以,表中的每一行都有“高数”
现在返回的Object[] 为:{ course, user1, user2, …… }。注意:经过处理,只有1个Course了。直接返回DataTable 也是可以的,但DataTable中每行都课程,课程重复多次。所有返回Object[]比较“干练”,返回DataTable比较“臃肿”