ef封装类中如何使用db.Set().Select

anan3000 2018-10-20 02:22:41
ef封装类中,会有db.Set<T>().Where(whereLambda).ToList();这样,通过where返回符合whereLambda的数据列表,但是,这个是返回的列表包含了这些数据的所有列,虽然在获取这些数据列表后,也可以用select进行筛选,但是跟踪了下数据库,还是返回了符合条件数据列表的所有项,就像我一个数据表有100列,然后我要选出2列,把所有数据的两列填充进combobox中,还要查询传递100列的数据,感觉效率很低。现在就想把select也封装起来,就像db.Set<T>().Select(selectLambda).ToList();但是没成功,请帮忙。
...全文
1348 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-10-22
  • 打赏
  • 举报
回复
anan3000 2018-10-21
  • 打赏
  • 举报
回复
引用 1 楼 以专业开发人员为伍的回复:
(实际上我们已经不用 EF,重新用户 SqlHelper)

限制 EF 查询的字段列表其实很必要,起码对于单纯查询的语句(不更新数据库),应该支持。假设解析所谓的selectLamda 很麻烦,我们起码可以考虑字段“降维”,例如写
db.Set<T>().Where(whereLambda).Select2("FieldA","FieldB","PropertyC",......).ToList()
这类扩展函数,返回的结果实体中凡是没有在属性列表中的那些字段,只要给个默认值(例如0、false、null等)就行了,根本不需要从数据库加载值。
1,怎么不用ef了呢?2,select参数个数未知,能这样写吗,能否给出具体例子及调用?
anan3000 2018-10-21
  • 打赏
  • 举报
回复
引用 2 楼 caozhy的回复:
用dynamic linq
https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
它可以选择特定的列
这个单独使用没问题,但我要写成通用类,就不能select的参数有几个,要能通用,不知反射进entities是否可行,是否有相应代码
threenewbee 2018-10-21
  • 打赏
  • 举报
回复
用dynamic linq
https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
它可以选择特定的列
  • 打赏
  • 举报
回复
(实际上我们已经不用 EF,重新用户 SqlHelper)

限制 EF 查询的字段列表其实很必要,起码对于单纯查询的语句(不更新数据库),应该支持。假设解析所谓的selectLamda 很麻烦,我们起码可以考虑字段“降维”,例如写
db.Set<T>().Where(whereLambda).Select2("FieldA","FieldB","PropertyC",......).ToList()
这类扩展函数,返回的结果实体中凡是没有在属性列表中的那些字段,只要给个默认值(例如0、false、null等)就行了,根本不需要从数据库加载值。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧