2009-10-28 4 views
2

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

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

Текущий LINQ к 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

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

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

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

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

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

+0

Спасибо. Я скоро добавлю детали. – Sasha

1

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

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

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

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

PS2. Извините, у меня нет кода под рукой

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

Надеются, что это помогает

+0

Спасибо. Я постараюсь сделать, как вы говорите в PS3 – Sasha

+0

Вы более чем рады –

Смежные вопросы