Я получаю следующую ошибку при попытке сделать запрос 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
Если кто-либо ищет ответ 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