Объединение Linq-to-SQL и Linq-to-XML - PullRequest
1 голос
/ 13 января 2010

Можно ли объединить Linq-to-SQL и Linq-to-XML, если столбцом таблицы является XML?

Ответы [ 3 ]

3 голосов
/ 13 января 2010

Если под «объединением» вы имеете в виду «заставить Linq to SQL перевести запрос в реальный XML-запрос SQL Server», то я считаю, что ответ отрицательный. Но ничто не мешает вам извлечь данные XML и выполнить локальный запрос XML к ним.

Чтобы ответить на более общий вопрос о том, «как мне работать со столбцом XML в этом сценарии», наилучшим подходом будет создание пользовательской функции для обработки XML, если вы можете. Затем вы можете получить Linq to SQL для выполнения UDF.

Если это не удастся, я пойду по маршруту хранимой процедуры.

0 голосов
/ 14 января 2010

Да, это очень возможно, вот пример из Pro 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);
            }

А вот что это вывело бы:

Продовольственный рынок Великих озер: ИЛИ: Орегон

Магазин импорта Hungry Coyote: ИЛИ: Орегон

Lazy K Kountry Store: WA: Washington

Let's Stop N Shop: CA: California

Одинокий сосновый ресторан: ИЛИ: Орегон

Каньон гремучей змеи Бакалея: NM: Нью-Мексико

Save-a-lot Рынки: ID: Айдахо

Большой сыр: ИЛИ: Орегон

The Cracker Box: MT: Монтана

Организаторы Trail's Head Gourmet: Вашингтон: Вашингтон

Белый клевер Рынки: Вашингтон: Вашингтон

0 голосов
/ 13 января 2010

Да, это возможно. Вы можете объединить любое количество источников IEnumerable в одном запросе. Например, вот статья, показывающая, как можно комбинировать L2S с Linq to Excel:

http://blogs.msdn.com/ericwhite/archive/2008/12/03/joining-linq-to-sql-and-linq-to-excel.aspx

Randy

...