ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามทำแบบสอบถาม linq:
LINQ เป็นเอนทิตีไม่รู้จักเมธอด '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()
ภายใน