LINQ to Entities ne reconnaît pas la méthode 'System.Decimal Parse (System.String)' [duplicate]

AFAICS никто еще не разместил соответствующую часть документации :

Значения параметров по умолчанию оцениваются при выполнении определения функции. Это означает, что выражение оценивается один раз, когда функция определена, и что для каждого вызова используется одно и то же «предварительно вычисленное» значение. Это особенно важно для понимания, когда параметр по умолчанию является изменяемым объектом, таким как список или словарь: если функция изменяет объект (например, добавив элемент в список), значение по умолчанию изменяется. Обычно это не то, что было предназначено. Способ вокруг этого - использовать None как значение по умолчанию и явно проверить его в теле функции [...]

88
задан Nivid Dholakia 31 August 2011 в 17:50
поделиться

1 ответ

Как вы поняли, Entity Framework не может запустить ваш код C # как часть его запроса. Он должен иметь возможность преобразовать запрос в фактический оператор SQL. Чтобы это сработало, вам придется реструктурировать выражение запроса в выражение, которое может обрабатывать Entity Framework.

public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
    string name = this.charityName;
    string referenceNumber = this.referenceNumber;
    return p => 
        (string.IsNullOrEmpty(name) || 
            p.registeredName.ToLower().Contains(name.ToLower()) ||
            p.alias.ToLower().Contains(name.ToLower()) ||
            p.charityId.ToLower().Contains(name.ToLower())) &&
        (string.IsNullOrEmpty(referenceNumber) ||
            p.charityReference.ToLower().Contains(referenceNumber.ToLower()));
}
96
ответ дан StriplingWarrior 21 August 2018 в 06:46
поделиться
  • 1
    Отлично! Это именно то, что мне нужно. – Ross Brigoli 21 August 2014 в 14:03
  • 2
    когда вы сомневаетесь в поиске: stackoverflow.com/questions/2352764/… – Chris Hayes 19 February 2015 в 00:41
  • 3
    Возвращение построенного Expression<Func<T,type>> - очень хороший подход к этому. – Travis J 25 August 2017 в 22:41
  • 4
    Как вы могли бы использовать это в выражении LINQ? Я хотел бы сделать что-то подобное в качестве повторно используемого предложения Where, но боюсь его реализовать. – Zorgarath 27 October 2017 в 20:10
  • 5
    EDIT: неважно, это было бы: context.Where(IsSatisfied()) – Zorgarath 27 October 2017 в 20:39
Другие вопросы по тегам:

Похожие вопросы: