Как записать идентификатор в файл XML для первой записи, используя LINQ to XML? - PullRequest
1 голос
/ 14 декабря 2010

Я занимаюсь разработкой приложения для windows phone 7. Я использую XML в качестве базы данных для моего приложения. Я использую файл XML вместо таблицы базы данных для моего приложения. У меня есть следующая структура для одного из моих файлов XML.

<?xml version="1.0" encoding="utf-8" ?>
<Categories>
  <Category>
    <Category_ID></Category_ID>
    <Category_Name></Category_Name>
    <TransactionType_ID></TransactionType_ID>
  </Category>
  <Category>
    <Category_ID></Category_ID>
    <Category_Name></Category_Name>
    <TransactionType_ID></TransactionType_ID>
  </Category>
</Categories>

В приведенном выше XML-файле я вставляю значения для Category_Name & TransactionType_ID через пользовательский интерфейс моего мобильного приложения, используя LINQ to XML. В приведенном выше XML-файле я рассматриваю Category_ID как первичный ключ, а TransactionType_ID как внешний ключ, который принадлежит другому XML-файлу. В приведенном выше XML-файле я хочу сгенерировать идентификатор автоинкремента для узла Category_ID, как мы делаем в таблице базы данных. Для этого я использую следующий код

private int new_record_id()
        {
            IsolatedStorageFile isstore = IsolatedStorageFile.GetUserStoreForApplication();
            IsolatedStorageFileStream bookfile = new IsolatedStorageFileStream("Categories.xml", System.IO.FileMode.Open, isstore);

            XDocument xmldetails = XDocument.Load(bookfile);           

            var details = (from detail in xmldetails.Descendants("Category")
                           select (int.Parse(detail.Element("Category_ID").Value))).Max();


            bookfile.Close();

            return details + 1;
        }

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

 var details = (from detail in xmldetails.Descendants("Category")
                               select (int.Parse(detail.Element("Category_ID").Value))).Max();

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

1 Ответ

1 голос
/ 14 декабря 2010

Ну, для начала ваш запрос можно записать гораздо проще:

var id = xmlDetails.Descendants("book")
                   .Max(x => (int) x.Element("id"));

Теперь, если вы хотите иметь возможность обработать случай, когда в вашем XML нет книг, я бы сначала протестировал это явно:

int id;
if (xmlDetails.Descendants("book").Any())
{
    id = xmlDetails.Descendants("book")
                   .Max(x => (int) x.Element("id"));
}
else
{
    id = -1; // Or whatever you want to do
}

(Вы также можете использовать условный оператор для этого, если хотите).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...