2009-11-16 60 views
3

我需要使用xml-type列過濾數據庫表中的行。使用linq-to-sql和xlinq過濾xml列內容的數據庫記錄

表看起來像(精簡版)

id 
dbfield int 
xmlfield xml 

,我過濾它以這種方式

IQueryable<Data.entity> q = from u in datacontex.entities 
select u; 

if (val1.HasValue) 
    q = q.Where(x => x.dbfield > val1.value) 

if (val2.HasValue) 
    q = q.Where(x=> x.dbfield < val2.value) 

if (!string.IsNullOrEmpty(searchString)) 
q = q.Where (x=> x.xmlfield contains values from searchString) 

XML在xmlfield是非常簡單的,它看起來像

<doc> 
    <item id="no">test/WZ/2009/04/02</item> 
    <item id="title">blabla</item> 
... 

問題是如何在linq中添加WHERE條件,並且最好這個關聯應該轉換爲ms-sql查詢w沒有webservice應用程序上的處理數據集。

謝謝。

回答

3

LINQ-to-SQL不支持AFAIK支持TSQL中的xml擴展。兩種選擇,我看到:

  • 寫一個存儲過程/ UDF對於使用SQL/XML語法在整個查詢和地圖,爲您的數據上下文
  • 寫一個UDF,做測試單個行(返回一個布爾),其映射到數據的上下文,並在where子句中使用ctx.SomeUdf(row)的LINQ
1

您還可以創建你的SQL Server表計算列其中提取那些點點滴滴從XML並將它們存儲爲表格中的「正常」字段。我在生產系統中一直在不同的地方使用這種技術 - 工作得很好。

當你這樣做後,你可以使用像普通表字段那樣的,你可以使用它們來過濾Linq-to-SQL - 沒問題。

+0

感謝您的想法。 – tomo 2009-11-17 10:46:23