В чем разница между этими двумя запросами XML LINQ? - PullRequest
1 голос
/ 08 марта 2010

У меня есть 2 следующих запроса LINQ, и я не совсем разбираюсь в LINQ, в чем разница между двумя подходами ниже?

Есть ли обстоятельства, когда один подход лучше другого?

ChequeDocument.Descendants("ERRORS").Where(x=>(string)x.Attribute("D") == "").Count();

    (from x in ChequeDocument.Descendants("ERRORS") where
                            (string)x.Attribute("D") == ""
                            select x).Count())

Ответы [ 3 ]

3 голосов
/ 08 марта 2010

Как говорит Дарин, разницы нет. Лично я предпочел бы первый синтаксис, так как все, что у вас есть, это одиночное предложение where в выражении запроса. Обратите внимание, что первый синтаксис более читабелен как:

var query = ChequeDocument.Descendants("ERRORS")
                          .Where(x=>(string)x.Attribute("D") == "")
                          .Count();

Также обратите внимание, что это демонстрирует особый случай выражений запросов. Второй синтаксис изначально переведен на:

var query = ChequeDocument.Descendants("ERRORS")
                          .Where(x=>(string)x.Attribute("D") == "")
                          .Select(x => x)
                          .Count();

но компилятор удаляет no-op Select(x => x). Это не делает это в случае, когда нет других предложений - поэтому from x in y select x все еще становится y.Select(x => x).

2 голосов
/ 08 марта 2010

Нет никакой разницы. Компилятор преобразует второй синтаксис в первый (посмотрите с помощью Reflector на скомпилированную сборку), поэтому вам решать, какой синтаксис вам больше подходит.

0 голосов
/ 08 марта 2010

Для меня это то же самое. Разница лишь в том, что 1-й - это запись с лямбда-выражением, второй - с linq в xml.

...