【发布时间】:2020-02-20 05:48:39
【问题描述】:
我正在努力完成我认为应该是一项简单的任务,但发现它比我预期的要复杂得多。
基本上,给定:
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)
到目前为止,但我无法弄清楚如何使用字段名称创建类似的查询。
我是否缺少一些直截了当的东西?还是我的整个方法有缺陷?
【问题讨论】:
-
试试
objectList.Where(obj => obj.A < 1 && obj.B > 0.5 && obj.C == "text").ToList();? -
如果您的 objectList 包含 MyObject 类的列表,那么它应该会产生您期望的结果。
var results = objectList.Where(obj => obj.A < 1 && B > 0.5 && C.Equals("text"));。确保 objectList 已初始化并具有值。 -
如果我对您要达到的目标有正确的认识,那根本不是直截了当的。您必须实现一个解释器,在运行时将文本映射到代码。您将其误认为是一个容易解决的问题,这可能源于对 C# 程序如何执行的有缺陷的概念(但不一定)。
-
@PaulKertscher 是的,我认为这是正确的。我想我在想这一切都是错误的。有没有其他更明智的方法来解决这个问题?
-
您可能需要表达式来动态构建 linq 查询。一些帮助您入门的链接:From MSDNhttps://www.c-sharpcorner.com/UploadFile/vendettamit/create-dynamic-linq-using-expressions/