繁体   English   中英

将基于属性名称和值的过滤器表达式转换为 Linq Where 子句 Func<T, bool> ?

[英]Convert a filter expression based on property name and value to Linq Where clause 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM