在这两个语句中,我试图获取具有变量中指定名称的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 (字段)只有一个名称(字段)。
答案 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表达式之间是否存在差异。
如果是这样,这里也有类似的问题: