gpt4 book ai didi

C# PredicateBuilder 实体 : The parameter 'f' was not bound in the specified LINQ to Entities query expression

转载 作者:IT王子 更新时间:2023-10-29 03:47:38 28 4
gpt4 key购买 nike

我需要构建一个动态过滤器,并且我想继续使用实体。由于这个原因,我想使用 albahari 的 PredicateBuilder。

我创建了以下代码:

var invoerDatums = PredicateBuilder.True<OnderzoeksVragen>();
var inner = PredicateBuilder.False<OnderzoeksVragen>();

foreach (var filter in set.RapportInvoerFilter.ToList())
{
if(filter.IsDate)
{
var date = DateTime.Parse(filter.Waarde);
invoerDatums = invoerDatums.Or(o => o.Van >= date && o.Tot <= date);
}
else
{
string temp = filter.Waarde;
inner = inner.Or(o => o.OnderzoekType == temp);
}
}

invoerDatums = invoerDatums.And(inner);
var onderzoeksVragen = entities.OnderzoeksVragen
.AsExpandable()
.Where(invoerDatums)
.ToList();

当我运行代码时,只有 1 个过滤器不是日期过滤器。所以只有内部谓词被填充。执行谓词时出现以下错误。

The parameter 'f' was not bound in thespecified LINQ to Entities queryexpression.

在搜索答案时,我发现了以下 page .但这已经在 LINQKit 中实现了。

有没有其他人遇到过这个错误并且知道如何解决它?

最佳答案

我遇到了同样的错误,问题似乎是当我使用 PredicateBuilder 创建的谓词又由使用 PredicateBuilder 创建的其他谓词组成时

例如(A OR B) AND (X OR Y) 其中一个构建器创建 A OR B,一个构建器创建 X OR Y,第三个构建器将它们组合在一起。

只有一层谓词 AsExpandable 工作正常,当引入多于一层时,我得到了同样的错误。

我无法找到任何帮助,但通过反复试验,我能够让事情正常进行。每次我调用一个谓词时,我都会在它后面使用 Expand 扩展方法。

这里是一些代码,为了简单起见被删减了:

public static IQueryable<Submission> AddOptionFilter(
this IQueryable<Submission> query,
IEnumerable<IGrouping<int, int>> options)
{
var predicate = options.Aggregate(
PredicateBuilder.False<Submission>(),
(accumulator, optionIds) => accumulator.Or(ConstructOptionMatchPredicate(optionIds).Expand()));
query = query.Where(predicate.Expand());
return query;
}

Query 是一个 IQueryable,它已经调用了 AsExpandable,ConstructOptionNotMatchPredicate 返回一个 Expression。

一旦我们克服了错误,我们当然能够在运行时针对 Entity Framework 构建复杂的过滤器。

编辑:

由于人们仍在对此进行评论和投票,我认为它仍然有用,因此我将分享另一个修复程序。基本上我已经停止使用 LinqKit,它是支持这个的谓词生成器 Universal Predicate Builder具有相同的 API 但不需要 Expand 调用,非常值得一试。

关于C# PredicateBuilder 实体 : The parameter 'f' was not bound in the specified LINQ to Entities query expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947820/

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