Для LINQ2SQL: Получение Вашей головы вокруг части сгенерированного SQL и записи запросов LINQ, которые переводят в хороший (быстрый) SQL. Это - часть большей проблемы знания, как сбалансировать декларативную природу запросов LINQ с реализмом, который они должны выполнить быстро в известной среде (SQL Server).
можно добраться, совершенно другой SQL генерировал запрос путем изменения крошечной крошечной вещи в коде LINQ. Может быть особенно опасным, если Вы создаете дерево выражений на основе условных операторов (т.е. добавляете дополнительные критерии фильтрации).
Обратите внимание, что этот
var x = document.Elements("actors").Elements("actor").FirstOrDefault();
является эквивалентом вашего первого оператора.
Будет разница в производительности, потому что методы делают очень разные вещи под капотом. Однако оптимизация чисто операций в памяти немного бессмысленна, если вы не имеете дело с большим набором данных. Если вы имеете дело с большим набором данных, вам следует измерить производительность обеих альтернатив, а не пытаться предсказать, какая из них будет работать быстрее.
Да, будет, хотя эти две строки не эквивалентны.
В конечном итоге XPath необходимо преобразовать в выражение LINQ, которое затем сделало бы следующее: -
var x = document.Elements("actors").Elements("actor");
Однако вполне возможно, что скомпилированная версия выражения XPath сохраняется внутри, так что использование XPath стоит только времени, необходимого для поиска строка в некотором внутреннем словаре. Так ли это на самом деле, я не знаю.