gpt4 book ai didi

.net - LINQ to Entities 无法识别该方法

转载 作者:行者123 更新时间:2023-12-03 03:27:01 28 4
gpt4 key购买 nike

尝试执行 linq 查询时出现以下错误:

LINQ to Entities does not recognize the method 'Boolean IsCharityMatching(System.String, System.String)' method, and this method cannot be translated into a store expression.

我读过很多以前的问题,人们都遇到了同样的错误,如果我理解正确的话,那是因为 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;
}

如果您需要更多信息,请告诉我。

非常感谢,

安妮莉

最佳答案

正如您所了解的, Entity Framework 实际上无法将您的 C# 代码作为其查询的一部分运行。它必须能够将查询转换为实际的 SQL 语句。为了使其工作,您必须将查询表达式重组为 Entity Framework 可以处理的表达式。

public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
string name = this.charityName;
string referenceNumber = this.referenceNumber;
return p =>
(string.IsNullOrEmpty(name) ||
p.registeredName.ToLower().Contains(name.ToLower()) ||
p.alias.ToLower().Contains(name.ToLower()) ||
p.charityId.ToLower().Contains(name.ToLower())) &&
(string.IsNullOrEmpty(referenceNumber) ||
p.charityReference.ToLower().Contains(referenceNumber.ToLower()));
}

关于.net - LINQ to Entities 无法识别该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7259567/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com