C# lambda和常数之间的GreaterThanOrEqual算子
我的问题是如何通过Expression.GreaterThanOrEqual方法构建lambdaC# lambda和常数之间的GreaterThanOrEqual算子,c#,expression,C#,Expression,我的问题是如何通过Expression.GreaterThanOrEqual方法构建lambdac=>c.docdate>=DateTime.Today 谢谢 附言: 我做这些事情的目的是我认为我可以将这种方法应用于任何查询条件,例如int、decimal、。然后,我可以用泛型方法编写任何查询条件,并以任何方式将它们绑定在一起 例如: 我的课程如下: public class DataRangeT<T> : IRangeValue<T> where T : str
c=>c.docdate>=DateTime.Today
谢谢
附言:
我做这些事情的目的是我认为我可以将这种方法应用于任何查询条件,例如int、decimal、。然后,我可以用泛型方法编写任何查询条件,并以任何方式将它们绑定在一起
例如:
我的课程如下:
public class DataRangeT<T> : IRangeValue<T>
where T : struct
{
Nullable<T> _high;
Nullable<T> _low;
public Nullable<T> High { get { return _high; } set { _high = value; } }
public Nullable<T> Low { get { return _low; } set { _low = value; } }
}
公共类DataRangeT:IRangeValue
其中T:struct
{
可为空(高);;
可空(低);;
公共可空高{get{return}u High;}集{u High=value;}
公共可空低{get{return}u Low;}集{u Low=value;}
}
因为上限和下限都是可以为空的,所以我应该像下面那样构建我的查询
public static Expression<Func<T, bool>> RangeCompare<T>(Expression<Func<T, K>> selector, IRangeValue<K> patten)
{
Expression<Func<T, bool>> predicate = f=>true;
if (patten.High.HasValue)
{
predicate = predicate.And<T>(/* LowThanOrEqual */);
}
if (patten.Low.HasValue)
{
predicate = predicate.And<T>(/* GreaterThanOrEqual */);
}
return predicate;
}
公共静态表达式范围比较(表达式选择器,IRangeValue模式)
{
表达式谓词=f=>true;
如果(模式高值)
{
谓词=谓词和(/*LowThanOrEqual*/);
}
if(模式低值)
{
谓词=谓词和(/*大于或等于*/);
}
返回谓词;
}
因为>=运算符在Nullable中不受支持,所以我认为应该使用GreaterThanOrEqual
方法
predicate.And()
是我编写的一个帮助方法,用于动态组合查询。您尝试过什么吗?可能尝试过或应用过。这听起来像是一个错误。你想做什么的目的是什么?好的,你的问题现在看起来更清楚了。但也许答案也能回答这个问题?可能是重复的