【发布时间】:2020-10-13 07:57:19
【问题描述】:
我想创建一个方法,该方法将根据用户传递给我的方法的属性名称和值过滤我的数据。不幸的是,我无法更改代码使用的接口,我只是通过创建一种新型数据类来扩展它。请看代码我的意思:
public interface IService{
Task<IEnumerable<T>> GetCollection<T>(string name, string fieldPath, string value)
}
public class MockService : IService
{
MockDb _db = new Mock();
public async Task<IEnumerable<T>> GetCollection<T>(string fieldPath, string value)
{
Func<T, bool> func = <WHAT CODE IS REQUIRED HERE BASED ON THE FIELD PATH AND VALUE?>;
return _db.GetTable<T>(func);
}
}
数据类:
public class MockDb{
public List<T> GetTable<T>(Func<T, bool> func){
return somecollection.Where(func).ToList();
}
}
如何将输入转换为过滤器,即 fieldPath 和 value 转换为 Func?
【问题讨论】:
-
看来您使用的是Entity Framework,在这种情况下,您应该使用可以转换为SQL的
Expression<Func<T, bool>>。表达式可以动态构建;一个例子可以在这里找到:stackoverflow.com/questions/5094489/… -
在这种情况下不是,但我之前使用过 Expression
>。这只是静态对象的 Mock Db。不过非常感谢。
标签: c# linq lambda expression func