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;
}
추가 정보가 필요하면 알려주세요.
감사합니다.
Annelie
Find()
어떻게 사용 하는지 언제 사용하는지 보는 것이 좋을 IsSatisfied()
것입니다.