LinqToSql中的子查询是否保证与其父级的顺序相同?

时间:2009-05-26 18:06:46

标签: c# .net linq linq-to-sql

假设我有一个带有DateTime字段和int字段的表,并执行如下查询:

var query = context.tblSomeTable.Where(s=>s.Name == "Hello World").OrderBy(s=>s.SignUpDate);

如果我随后用结果执行两个子查询,它们是否仍按日期排序?:

var sub1 = query.Where(s=>s.Id = 5);
var sub2 = query.Where(s=>s.Id = 8);

我的直觉说它们仍处于有序状态,但是如果原始查询已被迭代/执行了,这是否重要?

2 个答案:

答案 0 :(得分:7)

是的,然而,说它们“仍然”被命令是错误的。他们最后一次订购。

关于LinqtoSql需要注意的重要一点是,它只是构建一个查询,在使用时执行。在您显示的示例中,您尚未实际使用该查询。你刚刚构建了两个大问题

他们都会生成这个SQL语句:

select * from tblSomeTable s
where s.Name = 'Hello World' and s.ID == @p1
order by s.SignUpDate

使用sub1时,@ p1将设置为5

(实际上,'Hello World'也将作为参数传递......)

答案 1 :(得分:1)

是的,它仍然保持相同的顺序。在你的情况下,第一个查询将是一个IOrderedQueryable,当你进一步查询时,sub1和sub2也将是IOrderedQueryable,因此将保持排序。