LINQ to SQL 转换为自定义方法的 SQL

DJP*_*JPB 5 c# linq-to-sql

有没有办法将表达式转换为 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 或者这可能吗?

Mar*_*ell 4

最实用的选择可能是组合:

// 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)。不是微不足道的。