哪个LINQ语句更好,为什么?

时间:2010-01-26 18:56:52

标签: c# linq linq-to-sql

在这两个语句中,我试图获取具有变量中指定名称的Category的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;

编辑:表格中每个 CategoryID (字段)只有一个名称(字段)。

3 个答案:

答案 0 :(得分:12)

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

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

第二个只返回一个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,请尽可能多地使用它们。

答案 1 :(得分:3)

它们不一样。

如果匹配很多,第一个将返回一个列表。

第二个只返回一个。

答案 2 :(得分:0)

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

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

LINQ: Dot Notation vs Query Expression