这里有人有编写自定义 Linq 提供程序的经验吗?
我想要做的是判断作为业务对象属性的 MemberExpression 是否应该包含在 SQL 中,或者是否应将其视为常量,因为它来自恰好是业务对象的局部变量.
例如,如果你有这个:
Customer c = LoadCustomerFromDatabase();
var orders = from o in db.Orders() where o.CustomerID == c.CustomerID select o;
目前,我的查询翻译器将尝试执行SELECT * FROM order o where o.CustomerID = c.CustomerID
,这当然不起作用。
我想要做的是检查 c.CustomerID 上的 MemberExpression 并尝试确定它是否是局部变量,或者只是用作 Linq 表达式的一部分。
我已经设法将其作为第二次查询,查找 SQL Server 无法绑定(bind)的字段,并注入(inject)它们的值,但如果可能的话,我希望这一切都发生在同一时间。我尝试查看表达式 Type
属性和 IsAutoClass
,但这只是猜测,因为它包含单词 Auto。但它不起作用:)
最佳答案
好吧,我不知道您是否可以将其减少到一次,但是您可以获得有关该成员的信息,以及它是否与您声明为查询一部分的另一个变量一致(在本例中为“o"),您可以使用它来生成查询。
否则,您会假设它是一个常量,然后插入该值。
不幸的是,由于您可以在查询中的多个位置使用 from 语句(除了 let 语句之外),因此您似乎无法一次性完成它,因为您需要了解所有查询前面的变量。
关于c# - 确定 MemberExpressions 目标的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456383/