2

我想选择行,直到找到某个数字 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 语句应该没有问题。但我不确定这种说法是否最有效。

4

3 回答 3

5
Context.Table.OrderBy(p => p.Name).TakeWhile(p => p.id != 4);
于 2013-10-12T09:56:01.443 回答
2
var result = Users.TakeWhile((u,i)=> i == 0 || Users.ElementAt(i-1).Id != 4);

另一种方法:

var result = Users.TakeWhile(u=>u.Id!=4)
                  .Union(Users.SkipWhile(u=>u.Id!=4).Take(1));
于 2013-10-12T09:55:25.420 回答
0
    var results = from n in names.TakeWhile( n => n.Id != 4)
       .Union(names.Where(n => n.Id == 4)) select n;
于 2013-10-12T12:28:50.067 回答