求动态LINQ的思路

地球修理员 2018-09-12 10:52:49
请问一下,有没有办法把下面的CreateUser变成一个由外部输入的动态的属性名

db.Customers.Where(c => c.CreateUser == "aaaaa");


类似下面这个意思,究竟是哪个字段需要等于aaaaa,由一个变量来决定

db.Customers.Where(c => fun(.........,"CreateUser") == "aaaaa");


我的目的是想要通过配置表来生成LINQ的表达式,但是如果是完全使用Expression的话,可能又面临处理一大堆不同类型的扩展,比如Datetime? 和Datatime之间的等等,所以想问问看大家有没有折中的思路。



...全文
407 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2018-09-14
  • 打赏
  • 举报
回复
dynamic linq: https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
  • 打赏
  • 举报
回复
设计“配置”基于高层次的业务接口设计。

如果你满脑子都是底层编程语句,那么还是不要太费力气。直接提供一个 c# 语言源代码文件或者一个 DLL 并动态使用,这就是配置了!
  • 打赏
  • 举报
回复
总有人说,我发明一个技术方法,它技术卖点说起来好像是“万能了”,以后我用它就肯定敢于面对各种需求了、以后我就肯定不坑客户了!

而实际上,如果你说你可以把程序逻辑完全“混淆”起来,结果不懂编程的用户一下子看了这个混淆的所谓万能方法之后,一下子就懂编程了,这其实就是完全不可能的事情。你不过是重新发明了一种脚本语言,你需要自己写语法解析语义计算的代码。你并没有给最终用户带来什么比传统的 basic、sql 等语言设计更新颖的所谓配置文件。
正怒月神 2018-09-14
  • 打赏
  • 举报
回复
db.Customers.Where(c => c.CreateUser == "aaaaa");

改成
public List<T> Get<T>(Expression<Func<T,bool>> exp)
{
var q = dbEF.Set<T>().Where<T>(exp);
return q;
}

调用
Get<Customers>(x=>x.name="123");

  • 打赏
  • 举报
回复
根据条件,组织List<Func<xxx,bool>>集合传递给方法不就行了?
if(!string.IsNullOrEmpty(xxx))
{
list.Add(x=>x.CreateUser ==xxx);
}
  • 打赏
  • 举报
回复
“配置表”的设计应该层次高级一些,从用户需求出发。而不是从底层某些编程语句出发来设计配置表。

如果技术的出发点只是为了技术而技术,那么肯定是劳民伤财,到头来容易害了自己。
圣殿骑士18 2018-09-14
  • 打赏
  • 举报
回复
建议你用Dapper,手写sql
  • 打赏
  • 举报
回复
要编写强类型的代码,就是写类似
var query = ......;
if(a)
query = from x in query where x.aa==a select x;
if(b)
query = from x in query where x.bb>b select x;
................
这类强类型的代码。

如果说一个过程它时根本不知道逻辑是什么,那么它自己需要语法分析语义分析然后处理计算。那么你应该直接发送 sql 语言字符串给数据库系统,而不应该使用 Linq Provider 来编程。
  • 打赏
  • 举报
回复
你为啥不把 db.Customers 也变成字符串呢?

为啥不直接使用 ADO.NET 呢?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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