我的项目需要让用户构建自己的动态查询。从我所读到的,表达树是可行的方式。但是语法相当复杂。
我设想有一个GUI,用户可以在其中检查表,选择列,指定参数等,然后构建一个字符串,如:
var myQuery =
from P in context.Projects
join UA in context.UserAttributes on P.ProjectID equals UA.ProjectID
join UBA in context.UserBooleanAttributes on UA.UserAttributeID equals UBA.UserAttributeID
join U in context.Users on UBA.UserID equals U.UserID
where P.ProjectID == 1
where UBA.Value == true
where (UA.UserAttributeID == 1 || UA.UserAttributeID == 2)
select new { uba = U };
并将其存储在查询表中。为了处理查询,我希望有一些库可以神奇地执行以下操作:
var result = magic(str);
foreach(var user in result)
Foo(user.Email);
在这个例子中,我知道我的所有查询都会返回用户,但对于其他查询,我可能需要使用反射,或者在另一列中指定结果中的预期类型。
我发现了一个名为LinqTextQueryBuilder的项目看起来很有趣,但我想知道是否还有其他选择。