一般来说,假设1条记录被退回,是否比另一条更快?
使用一个比另一个好吗?
仅作为一个例子:
DataContext.TableBlah.FirstOrDefault(_blah => _blah.id == 1);
或
var test = (from blah in TableBlah
where blah.id == 1
select blah)
答案 0 :(得分:2)
var test = (from blah in TableBlah
where blah.id == 1
select blah)
这可以返回多于1行,用于匹配记录(与FirstOrDefault
相反)。
表现明智,我认为不应该有任何不同 它还取决于表中的行数? Id列是否已编入索引?
答案 1 :(得分:2)
FirstOrDefault会在找到结果后立即返回,因此它可以稍微快一些,但不会达到一个数量级...无论如何,您的第二个查询可以返回多个结果,所以这不是一个公平的比较。您可以将其与SingleOrDefault进行比较,这类似于Select,但只返回1个结果。
SingleOrDefault与Select一样,必须通过完整列表,但它保证您只获得一个结果。
注意:如果您使用的是Linq to SQL,那么第二次查询可能会更快,取决于您的索引......
答案 2 :(得分:1)
这可能会更快。
var test = (from blah in TableBlah
where blah.id == 1
select blah)
这取决于您使用的LINQ提供程序。如果你正在使用LINQ to Sql或Subsonic等,这可以转换为直接的SQL调用,它只会从数据库中获取一行。
在LINQ to Objects中,由于LINQ的结果流,这两个语句几乎完全相同。
答案 3 :(得分:1)
我90%肯定
var test = dc.TableBlah.FirstOrDefault(_blah => _blah.id == 1);
设置与
完全相同的表达式树var test = (from blah in dc.TableBlah
where blah.id == 1
select blah).FirstOrDefault();
因此,您的第二个示例只是通过调用FirstOrDefault()
而无法获得单个记录。在性能方面,它们将是相同的。
就个人而言,我会使用SingleOrDefault()
代替,因为您正在寻找单个项目。如果您收到多条记录,SingleOrDefault()
将会抛出。