LINQ использовать с XML - PullRequest
       15

LINQ использовать с XML

2 голосов
/ 28 октября 2009

У нас есть проект, в котором доступ к слою БД (MS SQL) осуществляется с помощью LINQ. Можем ли мы теперь изменить наш слой БД на XML-файл и по-прежнему обращаться к нему с тем же LINQ?

Мы хотим добавить возможность хранить данные в одном XML-файле или наборе XML-файлов.

Текущий код LINQ to SQL выглядит следующим образом:

result = (from e in db.Organizations
          where e.Id == idOrganization
          select e).SingleOrDefault();

или

 result = (from e in db.Organizations
           where e.Name.Trim().ToUpper() == organizationName.Trim().ToUpper()
               && e.Id!=idCurrentOrganization
           select e).Count()>0;

Ответы [ 2 ]

2 голосов
/ 29 октября 2009

LINQ to SQL и LINQ to XML имеют сходство, но они не идентичны. LINQ-запросы, вероятно, могли бы быть написаны так, чтобы их можно было использовать таким же образом, но код самих запросов, вероятно, нужно было бы изменить.

Не могли бы вы привести несколько примеров того, как выглядит ваш текущий код LINQ to SQL? Включение примеров того, какие данные вы используете и как вы хотите отформатировать XML, вероятно, поможет людям дать более конкретные указатели.

Редактировать: Ваш первый запрос возвращает объект. Если ваш LINQ to SQL и LINQ to XML возвращают один и тот же тип, вы можете поменять их местами, не изменяя код, который потребляет результат.

Ваш второй запрос, по-видимому, возвращает логическое значение, поэтому к нему применяется та же концепция. Код в другом месте вашего решения не будет заботиться о том, как был установлен этот bool.

Предложение Майка об использовании интерфейса для вашего уровня доступа к данным - это путь. Для ваших 2 примеров у вас будет интерфейс, который содержит объект Organization и bool. Ваши реализации SQL и XML будут другими, но любая другая часть вашего кода должна будет знать только, как использовать интерфейс.

1 голос
/ 30 октября 2009

Вы должны сделать еще один шаг: вам нужно будет загрузить XML в XDocument (или XNode, если я правильно помню), прежде чем вы сможете запросить ваши данные.

После этого достаточно просто выбрать узлы в дереве с синтаксисом LINQ to XML.

К сожалению, нет синтаксиса LINQ, который позволял бы вам запрашивать оба и прозрачно подключать XML или БД.

PS. Обратите внимание на пространство имен XML, когда вы будете выбирать узлы, это может быть головной болью!

PS2. Извините, у меня нет удобного кода

PS3. Я бы посоветовал создать слой вашей базы данных из интерфейса, так что вы будете возможность переключения с XML на БД и наоборот

Надеюсь, это поможет

...