.NET 3.5,C#LINQ to SQL查詢XML字段DB-serverside?
我有一個具有「搜索」功能的網絡應用程序。一些可搜索的字段是表中的頭等列,但其中一些字段實際上是嵌入在XML數據類型中的字段。
此前,我構建了一個用於爲我的搜索動態構造SQL的系統。我有一個很好的類層次結構,它構建了SQL表達式和條件語句。唯一的問題是它從SQL注入攻擊是不安全的。
我在閱讀Rob Conery的優秀文章(http://blog.wekeroad.com/2008/02/27/creating-in-queries-with-linq-to-sql/),指出如果IQueryable結果永遠不會枚舉,那麼多個查詢可以合併爲一個服務器的TSQL查詢。這讓我想到我的動態搜索結構太複雜 - 我只需要結合多個LINQ表達式。
例如(人爲):
作者: ID(INT), 名字(VARCHAR(32)), 姓(VARCHAR(32))
context.Author.Where(xx => xx.LastName == "Smith").Where(xx => xx.FirstName == "John")
結果在下面的查詢:
SELECT [t0].[ID], [t0].[LastName], [t0].[FirstName]
FROM [dbo].[Author] AS [t0]
WHERE ([t0].[LastName] = Smith) AND ([t0].[FirstName] = John)
我意識到這可能是一個簡單的動態查詢生成的完美解決方案,從SQL安全注入 - 我只是遍歷我的IQueryable結果並執行額外的條件表達式來獲得我最終的單執行表達式。
但是,我找不到任何支持XML數據的評估。在TSQL,以獲得從XML節點的值,我們會做類似
XMLField.value('(*:Root/*:CreatedAt)[1]', 'datetime') = getdate()
但我找不到的LINQ to SQL相當於創建此評價。有一個存在嗎?我知道我可以評估所有非XML條件的數據庫端,然後做我的XML評估代碼端,但我的數據足夠大,以至於A)這是大量的網絡流量拖延性能和B)如果我無法評估XML第一個數據庫端以排除特定的結果集,則會出現內存異常。
想法?建議?
紅利問題 - 如果XML評估實際上是可能的數據庫方面,那麼FLWOR支持呢?
這是2013年底 - 任何更新? – 2013-12-12 01:20:56
@BenjaminGruenbaum自從我思考這個問題已經很長時間了。當我在此之間和之後改變工作時,我的用例就消失了。作爲我能記得的最好的,我使用了下面推薦的方法DanialM,該方法是調用用戶定義的函數。不能說因爲我從那以後就注意到了LINQ的任何直接支持(但我還沒有看過) – Matt 2013-12-12 19:07:04
有趣 - 我會嘗試在5年後以賞金欣賞新的答案。 – 2013-12-12 19:18:18