gpt4 book ai didi

c# - 我如何将一个简单的表达式附加到 IQueryable

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:13 25 4
gpt4 key购买 nike

我有以下方法:

    public List<Customer> SearchTest(string city, int skip, int take)
{
EcomContext db = new EcomContext();

var results = db.Customers.Where(n => n.City == city).OrdeyBy(n => n.Name).Skip(skip).Take(10);

results = AddDeleteCheck<Customer>(results);

return results.ToList()
}

这个可重用的方法:

    private IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var e2 = data.Expression;
var e3 = Expression.Lambda<Func<T, bool>>(Expression.AndAlso(e1, e2), parameter);

return data.Where(e3);
}

我希望能够从许多不同的函数中调用此方法,因此我将其设为通用。它应该从 IQueryable 对象中获取表达式并添加一个检查到这个 (Archived == false)。

我收到这个错误:二元运算符 AndAlso 没有为类型“System.Boolean”和“System.Linq.IQueryable”定义 [Ecom.Customer]

最佳答案

它比你写的更容易:

private static IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var lambda = Expression.Lambda<Func<T, bool>>(e1, parameter);
return data.Where(lambda);
}

请记住,在 Linq 中:

var result = query.Where(condition1).Where(condition2);

相当于:

var result = query.Where(condition1 && condition2);

关于c# - 我如何将一个简单的表达式附加到 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35552072/

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