我想选择行,直到找到某个数字 ID。如果我的数据是按 ID 排序的,那么问题可以很容易地解决。
Id Name
-----------
1 Bob
2 Eve
3 Alice
4 Michael
5 Anne
6 Mike
要在找到 Id 4 之前获取所有项目,以下 SQL 语句就足够了:
SELECT * FROM Users WHERE Id <= 4
如果数据是按名称排序的,我仍然想在找到 Id 4 之前获取这些项目,我无法想出一个好的解决方案。
Id Name
-----------
3 Alice
5 Anne
1 Bob
2 Eve
4 Michael
6 Mike
要定义的语句的输出应该是:
Id Name
-----------
3 Alice
5 Anne
1 Bob
2 Eve
4 Michael
编辑1:
使用以下语句,输出几乎是我需要的,但缺少 ID 为 4 的项目。
queryable.OrderBy(o => o.Name).TakeWhile(o => o.Id != 4);
Id Name
-----------
3 Alice
5 Anne
1 Bob
2 Eve
是否也可以包含 ID 为 4 的项目?
编辑2:
现在我将采用这种方法:
queryable.OrderBy(o => o.Name).TakeWhile(o => o.Id != 4).Union(queryable.Where(o => o.Id == 4))
由于 Id 是唯一的,因此 UNION 语句应该没有问题。但我不确定这种说法是否最有效。