如何解决将基于属性名称和值的过滤器表达式转换为Linq Where子句Func <T,bool>?
我想创建一个方法,该方法将根据属性名称和用户传递给我的方法的值来过滤数据。不幸的是,我无法更改代码使用的接口,而只是通过创建一种新型的数据类来扩展它。请查看代码我的意思:
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?
解决方法
这是一种简单的方法,假设fieldPath是属性的名称,而值是字符串类型:
public async Task<IEnumerable<T>> GetCollection<T>(string fieldPath,string value)
{
return _db.GetTable<T>(t=> ((string) t.GetType().GetProperty(fieldPath).GetValue(t)) == value);
}
对于更通用,更复杂的解决方案,您应该使用Jonathan Barclay建议的Expression。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。