Linq to SQL пишет переводимые функции - PullRequest
3 голосов
/ 09 февраля 2010

Я почти уверен, что ответом на этот вопрос является «Вы не можете этого сделать» или «Нет, нет, вы неправильно поняли ...», но:

У меня есть класс linq, вещь, которая с радостью выполнит это:

 var thingsWithAandB = from t in db.things
                       where t.propA.HasValue && t.propB.HasValue
                       select t;

Но я часто этим занимаюсь и хочу:

partial class thing
{
    public bool hasAandB
    {
        get
        {
            return propA.HasValue && propB.HasValue;
        }
    }
}

и затем:

var thingsWithAandB = from t in db.things where t.hasAandB select t;

Но, конечно, когда я делаю это, я получаю ошибки "Не могу перевести это на SQL". И я понимаю, что это потому, что вызов методов в середине SQL-запросов невозможен, так как мой код и база данных разделены.

Какой способ сделать это? Это невозможно?

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

Это вполне возможно. У Дэмиена Гварда (damieng.com) есть пример в его блоге, показывающий, как это сделать.

http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider

0 голосов
/ 09 февраля 2010

Вы можете использовать методы расширения:

public static class MyExtensions{
    public static bool HasAandB(this thing t){
        return t.propA.HasValue && t.propB.HasValue;
    }
}

и затем используйте его:

var thingsWithAandB = from t in db.things
                   where t.HasAandB()
                   select t;

EDIT
Извините, это, вероятно, даст вам то же исключение ...

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