2010-01-06 80 views
5

我使用Linq to sqlLinq Dynamic OrderBy。Linq To Sql - 动态OrderBy - 当我使用

我知道linq动态可以做简单的排序 - orderby(“column_name”)。

但是它是否支持更复杂的查询,例如“CASE WHEN”查询?

string orderbyQuery = "(CASE WHEN (username == 100) THEN 1 ELSE 0 END) DESC)"; 

这里是我的查询:

var u = from u in db.users 
     orderby(orderbyQuery) 
     select u; 

上面的例子不工作! ,任何想法,如果可能的话? 任何其他方式来做到这一点?

感谢

回答

10
var u = from u in db.users 
     orderby u.username == 100 ? 1 : 0 descending 
     select u; 
+0

我必须使用动态查询,因为,我有一个int [] realUsers = 100,22,77,12等...我想排序用户表基于那个int [],这意味着显示用户首先在“realUsers”中。 – dan 2010-01-06 13:53:23

+1

你可以替换那个u.username == 100? 1:0(几乎)任何你想要订购的逻辑,你基本上只是用C#而不是Sql编写它。不知道如何订购,很难提供比转换原始代码更好的示例... – 2010-01-06 14:03:25

1

这确实对我的作品:

var queryResult = 
    from o in Source 
    orderby (o.ColumnThatSaysOrderByColumn1 ? o.Column1 : o.Column2) descending 
    select o 

希望这有助于!

0

看来你不能在动态LINQ查询中使用CASE。但是你可以使用iif-keyword

var query = db.users.OrderByDescending("iif(username = '100', 1, 0)"); 

的动态LINQ表达的方法和关键字Overview