2010-01-13 73 views
1

是否可以結合LINQ到SQL和LINQ到XML如果表中的列是XML?結合LINQ到SQL和LINQ到XML

+0

你是什麼意思的「結合」? – 2010-01-13 17:44:32

+0

Linq到SQxML? :) – 2010-01-13 17:45:04

+0

我的意思是做一個SQL查詢使用xpath與LINQ到SQL使用LINQ到XML在它。 – 2010-01-13 19:57:13

回答

3

如果「合併」你的意思是「必須的LINQ to SQL翻譯查詢到實際SQL Server XML查詢「,那麼我相信答案是否定的。但是沒有任何東西阻止您提取XML數據並在其上運行本地XML查詢。

要回答的更普遍的問題:「我怎麼在這種情況下XML列的工作」,最好的方法是創建一個用戶定義的函數來處理XML,如果你能。然後你可以讓Linq to SQL來執行UDF。

做不到這一點,我會去的存儲過程的路線。

+0

的確,但是後來我得到一個內存溢出,因爲很多記錄被返回。 – 2010-01-13 19:28:40

+0

ouch。看看我的編輯 - 希望UDF或SP可以在這裏爲你工作。 – Aaronaught 2010-01-13 19:44:44

+0

事實上,存儲過程將是我的下一個想法。 – 2010-01-13 19:55:45

0

是的,它很可能在這裏是Joeseph Rattz從臨LINQ的一個例子:

using (NorthwindDataContext DB = new NorthwindDataContext()) 
     { 
      string StatesXml = 
       @"<States> 
        <State ID=""OR"" Description=""Oregon"" /> 
        <State ID=""WA"" Description=""Washington"" /> 
        <State ID=""CA"" Description=""California"" /> 
        <State ID=""ID"" Description=""Idaho"" /> 
        <State ID=""MT"" Description=""Montana"" /> 
        <State ID=""NM"" Description=""New Mexico"" /> 
       </States>"; 

      XElement States = XElement.Parse(StatesXml); 

      var Custs = (from c in DB.Customers 
         where c.Country == "USA" 
         select c).AsEnumerable().Join(
         States.Elements("State"), 
         c => c.Region, 
         s => (string)s.Attribute("ID"), 
         (c, s) => new 
         { 
          Customer = c, 
          State = (string)s.Attribute("Description") 
         }); 

      foreach (var Cust in Custs) 
      { 
       Console.WriteLine("Customer = {0} : {1} : {2}", 
        Cust.Customer.CompanyName, 
        Cust.Customer.Region, 
        Cust.State); 
      } 

這裏是什麼,將輸出:

大湖食品市場:OR:俄勒岡

飢餓的土狼進口商店:OR:俄勒岡州

懶惰K國家商店:WA:華盛頓

讓我們停止ñ店:CA:加州

寂寞松林餐廳:OR:俄勒岡

響尾蛇峽谷雜貨店:NM:新墨西哥州

保存一批量市場:ID:愛達荷州

大人物:OR:俄勒岡

的餅乾盒:MT:蒙大拿

徑的Head Gourmet Provisioners:WA:華盛頓

白三葉草市場:WA:華盛頓