【问题标题】:What is the difference between these 2 XML LINQ Queries?这两个 XML LINQ 查询有什么区别?
【发布时间】:2010-03-08 10:43:50
【问题描述】:

我有以下 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())

【问题讨论】:

    标签: c# linq .net-3.5 linq-to-xml


    【解决方案1】:

    正如达林所说,没有区别。就我个人而言,我更喜欢第一种语法,因为您所拥有的只是查询表达式中的一个 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();
    

    但编译器删除了无操作Select(x => x)。它不会在没有其他子句的情况下这样做 - 所以from x in y select x 仍然变为y.Select(x => x)

    【讨论】:

      【解决方案2】:

      根本没有区别。编译器将第二种语法转换为第一种(使用 Reflector 查看编译后的程序集),因此您可以自行决定哪种语法最适合您。

      【讨论】:

        【解决方案3】:

        对我来说也是一样。唯一的区别是第一个是用 lambda 表达式写的,第二个是用 linq to xml 写的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-19
          • 1970-01-01
          • 2016-05-06
          • 2017-04-19
          • 2013-04-11
          • 2012-04-19
          相关资源
          最近更新 更多