根据字符串输入查询列表

时间:2020-02-20 05:48:39

标签: c# linq

我正在尝试完成我认为应该是一件简单的任务,但是发现它比我预期的要复杂得多。

基本上是给定的:

public class MyObject
{
    public int A;
    public float B;
    public string C;
}

List<MyObject> objectList;

我希望能够读取类似以下内容的字符串:

"A < 1"
"B > 0.5"
"C = \"text\""

,然后为每个对象在objectList中获得满足要求的项目列表。

我一直在使用LINQ查询,例如:

objectList.Where(obj => obj.A < 1)

到目前为止,但无法弄清楚如何使用字段名称创建类似的查询。

我缺少一些简单的东西吗?还是我的整个方法有缺陷?

2 个答案:

答案 0 :(得分:2)

我认为您可以使用表达式树,您可以创建自己的lambda表达式并将其传递给Where函数。

例如,请检查以下链接:

Dynamically generate LINQ queries

或者您可以使用 System.Linq.Dynamic 命名空间。

https://docs.telerik.com/data-access/developers-guide/linq-support/data-access-feature-ref-linq-support-dynamic-linq

答案 1 :(得分:1)

您可以应用AND运算符(&&):

objectList.Where(obj => obj.A < 1 && obj.B > 0.5 && obj.C == "text").ToList();

更多阅读Filtering in LINQ

编辑:

如果要基于字符串查询,可以使用System.Linq.Dynamic

objectList.Where("string predicate ..");
相关问题