LINQ к объектам не распознает метод

Я получаю следующую ошибку при попытке сделать запрос LINQ:

LINQ к объектам не распознает метод «Boolean» IsharityMatching (System.String, System.String) метод, и это Метод не может быть переведен в выражение магазина.

Я прочитал много предыдущих вопросов, где люди получают ту же ошибку, и если я правильно понимаю это, это потому, что Linq для объектов требует, чтобы все выражение запроса LINQ было переведено на серверный запрос, и поэтому вы не можете позвонить Внешний способ в нем. Я не смог превратить свой сценарий во что-то, что еще работает, и мой мозг начинает растопить, поэтому я надеялся, что кто-то может указать мне в правильном направлении. Мы используем основу для объектов и шаблон спецификации (и я новичок в обоих).

Вот код, который использует спецификацию:

ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);

charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();

вот выражение LINQ:

public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
    return p => p.IsCharityMatching(this.charityName, this.charityReference);
}

Вот метод IsCharitymatching:

public bool IsCharityMatching(string name, string referenceNumber)
{
    bool exists = true;

    if (!String.IsNullOrEmpty(name))
    {
        if (!this.registeredName.ToLower().Contains(name.ToLower()) &&
            !this.alias.ToLower().Contains(name.ToLower()) &&
           !this.charityId.ToLower().Contains(name.ToLower()))
        {
            exists = false;
        }
    }

    if (!String.IsNullOrEmpty(referenceNumber))
    {
        if (!this.charityReference.ToLower().Contains(referenceNumber.ToLower()))
        {
            exists = false;
        }
    }

    return exists;
}

дайте мне знать, если вам нужна дополнительная информация.

Большое спасибо,

Annelie

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

1 ответ

Если кто-либо ищет ответ VB.Net (как я был первоначально), здесь это:

Public Function IsSatisfied() As Expression(Of Func(Of Charity, String, String, Boolean))

Return Function(charity, name, referenceNumber) (String.IsNullOrWhiteSpace(name) Or
                                                         charity.registeredName.ToLower().Contains(name.ToLower()) Or
                                                         charity.alias.ToLower().Contains(name.ToLower()) Or
                                                         charity.charityId.ToLower().Contains(name.ToLower())) And
                                                    (String.IsNullOrEmpty(referenceNumber) Or
                                                     charity.charityReference.ToLower().Contains(referenceNumber.ToLower()))
End Function
0
ответ дан 24 November 2019 в 03:25
поделиться
Другие вопросы по тегам:

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