2014-11-24 67 views
1

我在我的數據庫中有一個包含一組名稱的表。我需要按條件使用order來按字母順序排列名稱,除了如果用戶名是Say'John',應該在列表頂部打印一個名稱。我有一個SQL查詢,但 我如何在linq中使用下面的查詢?使用Linq按順序查詢除一條記錄外

SELECT name 
FROM names 
ORDER BY 
    CASE WHEN name = 'John' THEN 0 ELSE 1 END, 
name 
+1

你可以通過獲得沒有jhon排序的聯合加入的結果並結合列表來實現這一點 – Monah 2014-11-24 06:14:18

回答

1

試試這個: -

var result = db.names.Where(x => x.Name == "John") 
        .Concat(db.names.Where(x => x.Name != "John") 
        .OrderBy(x => x.Name)).ToList(); 
+0

謝謝Rahul它的工作。 – 2014-11-24 07:01:27

1

,你可以做以下

var listWithoutJohn=db.names.Where(t=>t.name!="John").OrderBy(t=>t.name).ToArray(); 
var johnList=db.names.Where(t=>t.name=="John").ToList(); 
var result=johnList.AddRange(listWithoutJohn); 

希望這將幫助你

+0

感謝哈迪,我會以這種方式檢查它。 – 2014-11-24 06:29:40

2

你也可以這樣來做:

var result = 
    db.names 
     .ToArray() 
     .OrderBy(x => (x.Name == "John" ? "0" : "1") + x.Name) 
     .ToArray() 
+0

不錯的@Enigmativity +1 :)我認爲它只會做1循環迭代。不是嗎?? – 2014-11-24 06:57:17

+0

@Enigmativity謝謝 – 2014-11-24 07:02:10

+1

@RahulSingh - 實際上,是的。儘管'OrderBy'可能是O(nlogn)。 – Enigmativity 2014-11-24 12:06:11