Я отримую таку помилку при спробі зробити запит linq:
LINQ для Entities не розпізнає метод "Boolean IsCharityMatching (System.String, System.String)", і цей метод не може бути переведений у вираз зберігання.
Я читав багато попередніх питань, коли люди отримують однакову помилку, і якщо я правильно це розумію, це тому, що LINQ для 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;
}
Повідомте мене, якщо вам потрібна додаткова інформація.
Велике дякую,
Аннелі
Find()
як використовуєте IsSatisfied()
всередині нього.