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

Asa*_*sad 2 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;
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ner 12

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

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

第二个只返回一个CategoryID.如果找不到至少一条记录,它也会抛出异常.

以下查询将等同于您的第一个语句:

var categoryID = DataContext.Categories.Where(c => c.Name == name).CategoryID;
Run Code Online (Sandbox Code Playgroud)

以下是与第二个语句等效的查询语法:

var categoryID = (from c in DataContext.Categories
                 where c.Name == name
                 select c.CategoryID).Single();
Run Code Online (Sandbox Code Playgroud)

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