Синтаксис LINQ to XML и LINQ to Objects - PullRequest
4 голосов
/ 28 января 2009

Почему:

(CheckBox)lstControls.Where(x => x.ID == "some_id").SingleOrDefault();

не так эффективно, как:

(CheckBox)lstControls.SingleOrDefault(x => x.ID == "some_id");

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

var xmlElem = (from n in xDocument.Descendants() where (string)n.Attribute("name") == "some_node_name" select n).SingleOrDefault();

Спасибо ....

Ответы [ 2 ]

2 голосов
/ 28 января 2009

Если я не ошибаюсь, с точки зрения большой эффективности O, то же самое. Это просто дополнительный вызов метода.

По второму вопросу

var xmlElem = (from n in xDocument.Descendants() where (string)n.Attribute("name") == "some_node_name" select n).SingleOrDefault();

можно выразить более просто как

var xmlElem = xDocument.Descendants().SingleOrDefault(n => (string)n.Attribute("name") == "some_node_name");
0 голосов
/ 12 июня 2012
(CheckBox)lstControls.Where(x => x.ID == "some_id").SingleOrDefault();

Это должно проверить каждый элемент в перечислении.

(CheckBox)lstControls.SingleOrDefault(x => x.ID == "some_id");

Это может остановить тестирование предметов и вернуться, как только что-то найдет.

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

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