2011-09-21 54 views
1

我想制作一个库,我可以在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查询?然后,我需要能够以某种方式动态构建嵌套查询..对不起,如果它没有很多的意义...

+4

您可能想查看动态查询库:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic- query-library.aspx – CAbbott

+0

请注意,所提到的DLINQ库相对较旧(如被动)。它仍然适用,但是(IMO)的某些部分在表达式树检查(我认为)不存在的情况下更好 - 在这种情况下 - 在这些.NET 3.5天内不存在。 – sehe

回答