代码之家  ›  专栏  ›  技术社区  ›  Asad

哪个LINQ声明更好,为什么?

  •  2
  • Asad  · 技术社区  · 15 年前

    在这两个语句中,我都试图获取具有变量中指定名称的类别的ID;

    两个都可以。有什么区别,哪一个更好?

    string name = "Progreammers";
    
    var categoryID = from c in DataContext.Categories
                                 where c.Name == name
                                 select c.CategoryID;
    
    var categoryID  = 
      DataContext.Categories.Single(c => c.Name == name).CategoryID;
    

    编辑: 只有一个 名字 (字段)每个 分类ID (字段)在表中。

    3 回复  |  直到 14 年前
        1
  •  12
  •   Peter Mortensen Mohit    14 年前

    这两个语句执行不同的功能。

    第一个可以返回多个记录。

    第二个只返回一个CategoryID。如果至少找不到一个记录,它还将引发异常。

    以下查询将等价于第一条语句:

    var categoryID = DataContext.Categories.Where(c => c.Name == name).CategoryID;
    

    下面是等价于第二条语句的查询语法:

    var categoryID = (from c in DataContext.Categories
                     where c.Name == name
                     select c.CategoryID).Single();
    

    无论哪种方式,一致性都可能是最重要的(因为它们都是以相同的方式执行的,所以性能应该是相同的)。如果使用查询语法,请坚持使用它。如果你开始使用 lambda expressions 尽可能多地使用它们。

        2
  •  3
  •   Peter Mortensen Mohit    14 年前

    它们不一样。

    如果有许多匹配项,第一个将返回一个列表。

    第二个只会返回一个。

        3
  •  0
  •   Community Romance    7 年前

    如前所述,这两个类型是不同的,但我认为您的问题的目的是询问“SQL”样式和“lambda”样式的LINQ表达式之间是否存在差异。

    如果是这样,这里有一个类似的问题:

    LINQ: Dot Notation vs Query Expression