我想制作一个库,我可以在xml文件中指定查询参数和运算符,并且在运行时我可以基于xml文件生成linq表达式。我只对建设“其中”表情那么简单的查询,如选择工作*从表,其中table.id = 1,这是在XML文件中的简单查询的例子:Linq中的动态表达式
<query name="latest">
<PropertyValue PropertyName="TimeStamp" OperatorName="GreaterThanOrEqual" ParamName="lastUpdated" />
</query>
时间戳属性名称是C#类中要使用的属性的名称。 ParamName是一个来自我的asp.net应用程序中的http请求的url参数。 在代码中,我可以建立LINQ表达出这一点,并作出以下where子句:
(IQueryable<DataObject>)dataObjects.Where(expression);
其中表达式为:
TimeStamp >= "2011-09-21T11:54:24"
但我有一个新的类型的查询,我需要能够处理:
SELECT * FROM theTable吨其中Id =
(从theTable 其中被Id降序源= t.Source顺序选择顶部1 Id)的0此查询在具有Id字段和Source字段的表上运行。查询返回每个Source的最新条目。因此,它按来源分组并按降序对其进行排序,并为每个来源返回第一个条目。然后,外部选择返回内部选择中每个结果的所有列。例如:
表:
id source field3 field4
1 Device1 test test
2 Device2 test2 test2
3 Device1 test3 test3
4 Device2 test4 test4
查询的结果:
id source field3 field4
3 Device1 test3 test3
4 Device2 test4 test4
所以现在我需要在where子句中动态地生成嵌套查询。我想我的第一个问题是,可以将该字符串查询转换为linq查询?然后,我需要能够以某种方式动态构建嵌套查询..对不起,如果它没有很多的意义...
您可能想查看动态查询库:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic- query-library.aspx – CAbbott
请注意,所提到的DLINQ库相对较旧(如被动)。它仍然适用,但是(IMO)的某些部分在表达式树检查(我认为)不存在的情况下更好 - 在这种情况下 - 在这些.NET 3.5天内不存在。 – sehe