使用实体框架在SQL中选择UNTIL

nik*_*klr 1 c# sql t-sql linq entity-framework

我想选择行,直到我找到一个数字的Id.如果我的数据按Id排序,问题可以很容易地解决.

Id    Name
-----------
1     Bob
2     Eve
3     Alice
4     Michael
5     Anne
6     Mike
Run Code Online (Sandbox Code Playgroud)

要获取所有项目,直到找到Id 4,以下SQL语句就足够了:

SELECT * FROM Users WHERE Id <= 4
Run Code Online (Sandbox Code Playgroud)

如果数据按名称排序,我仍然希望获得项目,直到找到Id 4,我无法找到一个好的解决方案.

Id    Name
-----------
3     Alice
5     Anne
1     Bob
2     Eve
4     Michael
6     Mike
Run Code Online (Sandbox Code Playgroud)

要定义的语句的输出应该是:

Id    Name
-----------
3     Alice
5     Anne
1     Bob
2     Eve
4     Michael
Run Code Online (Sandbox Code Playgroud)

编辑1:

使用以下语句,输出几乎是我需要的,但缺少Id 4的项目.

queryable.OrderBy(o => o.Name).TakeWhile(o => o.Id != 4);

Id    Name
-----------
3     Alice
5     Anne
1     Bob
2     Eve
Run Code Online (Sandbox Code Playgroud)

是否可以包含Id 4的项目?

编辑2:

现在我采用这种方法:

queryable.OrderBy(o => o.Name).TakeWhile(o => o.Id != 4).Union(queryable.Where(o => o.Id == 4))
Run Code Online (Sandbox Code Playgroud)

由于Id是唯一的,因此UNION语句应该没有问题.但我不确定这句话是否是最有效的.

Lor*_*ler 5

Context.Table.OrderBy(p => p.Name).TakeWhile(p => p.id != 4);
Run Code Online (Sandbox Code Playgroud)