Запрос не получает все записи - PullRequest
1 голос
/ 29 ноября 2011

У меня есть структура xml:

 <pit>
  <ROW TestID="47855" ExecutionID="1510034507" TestName="USHP" AssertionName="Check News" Status="1" TestLatencyMs="5448" Date="2011-11-29 01:43:45.117" HttpCode="" Error="" TestOwner="mdk" AssertionID="119117" /> 
  <ROW TestID="47855" ExecutionID="1510028579" TestName="USHP" AssertionName="Check News" Status="0" TestLatencyMs="7312" Date="2011-11-29 01:41:46.273" HttpCode="" Error="" TestOwner="fdxk" AssertionID="119117" /> 
  <ROW TestID="47855" ExecutionID="1510022153" TestName="USHP" AssertionName="Check News" Status="0" TestLatencyMs="5860" Date="2011-11-29 01:39:44.153" HttpCode="" Error="" TestOwner="klo" AssertionID="119117" /> 
  </pit>

, и я пытаюсь использовать этот запрос для получения моих ExecutionID, но безрезультатно :( Я не знаю, что не так.

    List<int> executionIdList = new List<int>();
    try
    {
        executionIdList = (from result in xDoc.Root.Descendants("ROW")
                            where result != null &&
                            result.Attribute("Status").Value.Equals("0", StringComparison.CurrentCultureIgnoreCase)

                           select result.Attributes("ExecutionID")).FirstOrDefault().Select(x => int.Parse( x.Value)).ToList();
    }

Я получаю только первое значение по вышеуказанному запросу.

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

Причина, по которой вы не получаете результаты, заключается в том, что

IEnumerable<int> executionIds;

executionIds =
    from result in xDoc.Root.Descendants("ROW").Attributes("ExecutionID")
    select int.Parse(result.Value);

Это то, что вам нужно. Ваша функция содержит много, казалось бы, ненужного кода (но это вы должны судить) в части выбора, включая оператор FirstorDefault, который выберет только первую запись или по умолчанию предопределенное значение, если записи не существует.

1 голос
/ 29 ноября 2011

Вы можете получить свои ExecutionIds из XDocument, как показано ниже:

XDocument doc = XDocument.Load(@"C:\Sample1.xml");
List<string> ids = doc.Descendants("pit").Elements().Select(i => i.Attribute("ExecutionID").Value).ToList();

Приведенный выше код загружает xml из файла Sample1.xml, а затем извлекает все executeID в объект списка.При необходимости вы можете добавить дополнительные условия к запросу, например, проверяя, равно ли значение статуса «0».Ниже приведен код с условием

List<string> ids = doc.Descendants("pit").Elements().Where(k=>k.Attribute("Status").Value == "0").Select(i => i.Attribute("ExecutionID").Value).ToList();

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

0 голосов
/ 29 ноября 2011

Вы получаете элементы первой строки, потому что ваш запрос вызывает потомков элемента "ROW", т.е.

xDoc.Root.Descendants ( "ROW")

Попробуйте заменить его следующим кодом:

xDoc.Root.Descendants ( "яма")

Это вернет все элементы, которые являются потомками элемента.

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