gpt4 book ai didi

c# - 如何通过将 Func 与 int 进行比较来创建 Expression

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

我有一个包含很多 DbSet 的 DbContext。每个 DbSet 都应该有一个函数来从集合中获取一页项目,具有给定的 pageSize 并按特定的 sortOrder 排序。像这样的东西:

var pageItems = dbContext.Posts
.Where(post => post.BlogId == blogId)
.OrderBy(some sortorder)
.Skip(pageNr * pageSize)
.Take(pageSize);

我希望能够对我的所有 DbSet 执行此操作,因此我创建了一个扩展方法,其中一个参数指定要比较的外键,另一个参数指定该外键应具有的值。

public static IQueryable<TSource> GetPage<TSource>(this IQueryable<TSource> source,
int pageNr, int pageSize,
Expression<Func<TSource, Tproperty>> keySelector, Tproperty comparisonValue)
{
return source
.Where( ??? )
.OrderBy(some sortorder)
.Skip(pageNr * pageSize)
.Take(pageSize);
}

如何将谓词中的keySelector转换为适合Where的谓词?

最佳答案

How to convert the keySelector in a predicate suitable for Where?

这很简单,但我不知道您将如何处理订单。不管怎样,这里是你如何做你要求的:

public static IQueryable<TSource> GetPage<TSource, TKey>(this IQueryable<TSource> source,
int pageNr, int pageSize,
Expression<Func<TSource, TKey>> keySelector, TKey comparisonValue)
{
var predicate = Expression.Lambda<Func<TSource, bool>>(
Expression.Equal(keySelector.Body, Expression.Constant(comparisonValue)),
keySelector.Parameters);

return source
.Where(predicate)
//.OrderBy(some sortorder) ??
.Skip(pageNr * pageSize)
.Take(pageSize);
}

关于c# - 如何通过将 Func<TSource, int> 与 int 进行比较来创建 Expression<Func<TSource, bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371858/

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