gpt4 book ai didi

c# - 为什么后面跟着 Any 的 IQueryable 会导致没有 Where 子句的选择?

转载 作者:行者123 更新时间:2023-11-30 20:57:44 30 4
gpt4 key购买 nike

我正在使用 Entity framework 4 并且我有以下代码:

public decimal GetSchoolSuccessRate(EvaluationComparationFilter filter)
{
return this.GetSuccessRate(x => x.TestCampaignId == filter.TestCampaignId &&
x.SubjectId == filter.SubjectId &&
x.SectionNo == 0, filter.CountSvp);
}


private decimal GetSuccessRate(Func<FinalResult_Base, bool> wherePredicate, bool countSvp)
{
using (var db = new DataEntities())
{
IQueryable<FinalResult_Base> query = db
.FinalResult_Bases.Where(wherePredicate).AsQueryable();


if (!countSvp)
query = query.Where(x => x.SpecialNeeds == 0);


query.Any(); //--HERE is created the SELECT with NO WHERE clause
....
}
}

我不明白为什么在 query.Any() 行生成的 SELECT statmenet 没有任何 WHERE 子句。来自 wherePredicatex.SpecialNeeds == 0 的过滤器均未应用。

有什么想法吗?

更新 1:问题似乎是 wherePredicate,它属于 Func 类型而不是 Expression。我会尝试使用 Expression。

最佳答案

尝试更改 GetSuccessRate

的方法声明
private decimal GetSuccessRate(
Expression<Func<FinalResult_Base, bool>> wherePredicate, bool countSvp)

原因是有两个Where里面的扩展方法:Enumerable.WhereQueryable.Where他们有不同的声明:

public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)

public static IQueryable<TSource> Where<TSource>(
this IQueryable<TSource> source,
Expression<Func<TSource, bool>> predicate)

所以一个人收到 Func<TSource, bool>还有一个Expression<Func<TSource, bool>>

更改声明后 .AsQueryable()打电话不会有任何区别。

关于c# - 为什么后面跟着 Any 的 IQueryable 会导致没有 Where 子句的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605101/

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