【发布时间】:2021-11-06 23:42:37
【问题描述】:
尝试执行 linq 查询时出现以下错误:
LINQ to Entities 无法识别方法 'Boolean IsCharityMatching(System.String, System.String)' 方法和这个 方法不能翻译成商店表达式。
我已经阅读了很多以前的问题,人们会遇到同样的错误,如果我理解正确,那是因为 LINQ to Entities 需要将整个 linq 查询表达式转换为服务器查询,因此您不能调用里面有一个外部方法。我还没有能够将我的场景转换成可行的东西,而且我的大脑开始崩溃,所以我希望有人能指出我正确的方向。我们正在使用实体框架和规范模式(我对这两者都很陌生)。
这是使用规范的代码:
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()。
标签: .net linq entity-framework linq-to-entities specification-pattern