2010-01-13 69 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:华盛顿