C# 哪种LINQ语句更好?为什么?

C# 哪种LINQ语句更好?为什么?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,在这两个语句中,我都试图获取Category的ID,该ID具有变量中指定的名称 两者都很好。有什么区别?哪一个更好 string name = "Progreammers"; var categoryID = from c in DataContext.Categories where c.Name == name select c.CategoryID; var catego

在这两个语句中,我都试图获取Category的ID,该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(字段)只有一个名称。

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

第一个可以返回多个记录

第二个将只返回一个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();
下面是与第二条语句等效的查询语法:

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();
无论哪种方式,一致性可能是最重要的(性能应该是相互一致的,因为它们都以相同的方式执行)。如果您使用查询语法,请坚持使用它。如果开始使用,请尽可能多地使用它们。

它们不一样

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


第二个表达式将只返回一个。

正如前面提到的,这两个表达式是不同的,但我认为您的问题的目的是询问“SQL”样式和“Lambda”样式的LINQ表达式之间是否有区别

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


此外,如果没有具有给定ID的记录,则第二条将抛出。感谢第一条的等价项。没有=>表达式的第一条语句的等价项是什么?Thanks@asdi-为第二条语句添加了查询语法。categoryID的类型在示例代码中会有所不同。确保它是,在DB中它是Bigint,在代码中它是long。但我不明白你的意思是什么?我的意思是,第一个将是IEnumerable,而第二个将是longQuery语法,编译器实际上只是将其转换为lambda语法,所以只要两个语句真正编写为做相同的事情,它们是等价的。