Saya mendapatkan kesalahan berikut saat mencoba melakukan kueri LINQ:
LINQ ke Entitas tidak mengenali metode metode 'Boolean IsCharityMatching (System.String, System.String)', dan metode ini tidak dapat diterjemahkan ke dalam ekspresi penyimpanan.
Saya telah membaca banyak pertanyaan sebelumnya di mana orang mendapatkan kesalahan yang sama, dan jika saya memahami ini dengan benar, itu karena LINQ ke Entitas memerlukan seluruh ekspresi kueri LINQ untuk diterjemahkan ke kueri server, dan oleh karena itu Anda tidak dapat memanggil metode luar di dalamnya. Saya belum bisa mengubah skenario saya menjadi sesuatu yang berhasil, dan otak saya mulai mencair, jadi saya berharap seseorang bisa mengarahkan saya ke arah yang benar. Kami menggunakan Entity Framework dan pola spesifikasi (dan saya baru mengenal keduanya).
Berikut kode yang menggunakan spesifikasi tersebut:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Berikut ekspresi linq:
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Berikut metode 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;
}
Beri tahu saya jika Anda memerlukan informasi lebih lanjut.
Terimakasih banyak,
Annelie
Find()
saat bagaimana Anda menggunakan IsSatisfied()
di dalamnya.