有没有办法将表达式转换为 SQL 以与LINQ to SQL一起使用?
例如,我有一个比较两个值的方法。
例子:
MyComparer.Compare(value1, value2, ">") return value1 > value2
MyComparer.Compare(value1, value2, "=") return value1 == value2
MyComparer.Compare(value1, value2, "<=") return value1 <= value2
Run Code Online (Sandbox Code Playgroud)
我想要这样的查询:
var list = from i in dataContext.items
where MyComparer.Compare(i.value, someValue, "some operator")
select ...
Run Code Online (Sandbox Code Playgroud)
这行不通,因为显然MyComparer不能转换为 SQL。
也许这是一个扭曲的问题,但是我如何将此方法转换为 SQL 或者这可能吗?
最实用的选择可能是组合:
// build the core query
var list = from i in dataContext.items
// most of your query
select ...
// compose the value-filter if required
switch(someOperator) {
case "=": list = list.Where(row => row.value1 == row.value2); break;
case ">": list = list.Where(row => row.value1 > row.value2); break;
case "<": list = list.Where(row => row.value1 < row.value2); break;
}
// now use "list"
Run Code Online (Sandbox Code Playgroud)
如果你需要一些可重用的东西,你将不得不亲自构建(并且可能解析)表达式树(System.Linq.Expression)。不是微不足道的。