gpt4 book ai didi

c# - EF-如何使用 Linq to Entities 执行 'Not In'

转载 作者:行者123 更新时间:2023-11-30 16:35:05 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 3.5,但在运行此查询时遇到问题。

我有以下实体:Applicant、application 和 applicationstatusHistory(跟踪求职者)

我在 Application 中寻找匹配项,其中 applicationidsapplicationstatusHistory 中没有匹配的 ID of -在此处插入参数-。这 2 个实体由 applicationid 连接。

这是我目前的陈述:

 applications = context.Application.Include("Applicant").Include("ApplicationStatusHistory")
.Where(LinqExtension.BuildContainsExpression<Application, int>(a => a.Id, applicationIds))
.ToList();

最佳答案

不确定 BuildContainsExpression 中发生了什么,但这是我在某处找到的一个我一直在使用的 WhereNotIn 方法:

public static IQueryable<T> WhereNotIn<T, TValue>(
this IQueryable<T> query,
Expression<Func<T, TValue>> propertySelector,
IEnumerable<TValue> values)
{
if (propertySelector == null)
{
throw new ArgumentNullException("propertySelector");
}

if (values == null || !values.Any())
{
return query.Where(i => true);
}

var param = propertySelector.Parameters.Single();
var unequals = values.Select(value => (Expression)Expression.NotEqual(propertySelector.Body, Expression.Constant(value, typeof(TValue))));
var body = unequals.Aggregate<Expression>((accumulate, unequal) => Expression.And(accumulate, unequal));
var lambda = Expression.Lambda<Func<T, bool>>(body, param);

return query.Where(lambda);
}

编辑:如评论中所述,此代码需要放在静态类中以用作扩展方法。

关于c# - EF-如何使用 Linq to Entities 执行 'Not In',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136275/

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