При попытке выполнить запрос linq возникает следующая ошибка:
LINQ to Entities не распознает метод 'Boolean IsCharityMatching (System.String, System.String) ', и это метод не может быть переведен в выражение хранилища.
Я прочитал много предыдущих вопросов, когда люди получают ту же ошибку, и если я правильно ее понимаю, потому что LINQ to Entities требует, чтобы все выражение запроса linq было переведено на серверный запрос, и поэтому вы не можете позвонить внешний метод в нем. Я не смог преобразовать свой сценарий в то, что работает, и мой мозг начинает таять, поэтому я надеялся, что кто-то сможет указать мне в правильном направлении. Мы используем Entity Framework и шаблон спецификации (и я новичок в обоих).
Вот код, который использует спецификацию:
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;
}
Сообщите мне, если вам нужна дополнительная информация.
Большое спасибо,
Аннели