簡體   English   中英

使用實體框架在SQL中選擇UNTIL

[英]SELECT UNTIL in SQL with Entity Framework

我想選擇行,直到找到確定的數字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語句應該沒有問題。 但是我不確定這句話是否是最有效的。

Context.Table.OrderBy(p => p.Name).TakeWhile(p => p.id != 4);
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));
    var results = from n in names.TakeWhile( n => n.Id != 4)
       .Union(names.Where(n => n.Id == 4)) select n;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM