【发布时间】:2013-10-20 09:27:29
【问题描述】:
我想选择行,直到找到某个数字 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 语句应该没有问题。但我不确定这种说法是否最有效。
【问题讨论】:
-
无论排序如何,select 语句仍然会返回 ID 小于或等于 4 的所有记录。
-
我知道这一点。我的问题是要找到一个将顺序考虑在内的语句。
标签: c# sql linq entity-framework tsql