gpt4 book ai didi

c# - 使用 IsInDateTimeRange 扩展 IQueryable

转载 作者:太空狗 更新时间:2023-10-30 00:29:52 24 4
gpt4 key购买 nike

所以我对一遍又一遍地重写相同的查询感到有些厌倦。

repo.Query().Where(stuff => stuff.Timestamp >= minTime && stuff.Timestamp <= maxTime && ...);

我想我应该扩展 IQueryable使用名为 IsInDateTimeRange 的方法, 并像这样使用它

repo.Query().IsInDateTimeRange(stuff => stuff.Timestamp, minTime, maxTime) ...

这对于 IEnumerable 来说非常容易, 只是一个 Func<T, DateTime>和两个 DateTime s,但是对于 IQueryable我需要拍一张 Expression我不太确定如何使用它。

这是我的尝试,但似乎没有用。

public static IQueryable<TValue> IsInDateTimeRange<TValue>(
this IQueryable<TValue> self,
Expression<Func<TValue, DateTime>> getMember,
DateTime minTime,
DateTime maxTime)
{
return self.Where(value => minTime >= getMember(value) && maxTime <= getMember(value));
}

最佳答案

您可以通过基于传递给方法的属性访问表达式手动构建表达式来完成此操作:

public static IQueryable<TValue> IsInDateTimeRange<TValue>(
this IQueryable<TValue> self,
Expression<Func<TValue, DateTime>> getMember,
DateTime minTime,
DateTime maxTime)
{
var getMemberBody = getMember.Body;
var filter = Expression.Lambda<Func<TValue, bool>>(
Expression.And(
Expression.LessThanOrEqual(
Expression.Constant(minTime),
getMemberBody
),
Expression.LessThanOrEqual(
getMemberBody,
Expression.Constant(maxTime)
)
),
getMember.Parameters
);
return self.Where(filter);
}

关于c# - 使用 IsInDateTimeRange 扩展 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46072984/

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