具有 Lambda/Selector/Predicate 逻辑的扩展方法
我试图将以下逻辑放入扩展方法中,让我为字段的选择器传递一个 Func 。
public class MyClass {
public decimal someValue {get; set;}
}
public class NumericSearch {
decimal searchValue {get; set;}
// Will be =, <=, >=, >, <
string searchType {get; set;}
}
...
List<MyObject> listOfClass = { ... };
if (search.searchType == "=") {
listOfClass = listOfClass.Where(l=>l.someValue == 123).ToList();
} else if (search.searchType == "<=") {
listOfClass = listOfClass.where(l=>l.someValue <= 123).ToList();
} else if (...){
...
}
我的目标是能够像这样调用它:
var filteredList = listOfClass.applyNumericSearch(l=>l.someValue, new NumericSearch() { searchValue = 123, searchType = "<="} );
到目前为止,我的方法签名看起来像这样,但我不太确定如何处理 Lamda /selection 部分来实际完成我想要完成的工作:
public static IEnumerable<TSource> applyNumericSearch<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal> selector, NumericSearch search) {
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此外,我强烈考虑将
searchType
设为枚举的实例,而不是使用
string
。Additionally, I strongly consider making
searchType
an instance of an enuminstead of using
string
.看一下 动态 LINQ 库。
如果您对 lambda 感到满意,只需使用不同的谓词即可:
但这不适用于数据库。
Take a look at Dynamic LINQ library if you really want to use string queries.
If you're fine with lambdas, just use different predicates:
This will not work for databases though.