2011-09-21 77 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

回答