LINQ to SQL перевод в SQL пользовательского метода - PullRequest
4 голосов
/ 18 марта 2010

Есть ли способ перевести выражение в 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

И я хотел бы запрос как:

var list = from i in dataContext.items
           where MyComparer.Compare(i.value, someValue, "some operator")
           select ...

Это не сработает, потому что, очевидно, MyComparer не переводится в SQL.

Может быть, это запутанный вопрос, но как я могу перевести этот метод на SQL или это возможно?

1 Ответ

4 голосов
/ 18 марта 2010

Наиболее прагматичным вариантом может быть композиция:

// 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"

Если вам нужно что-то для повторного использования, вам придется испачкать руки, создавая (и, возможно, разбирая) деревья выражения (System.Linq.Expression). Нетривиально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...