Linq To Sql - 动态OrderBy - 当我使用
问题描述:
我使用Linq to sql和Linq 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;
上面的例子不工作! ,任何想法,如果可能的话? 任何其他方式来做到这一点?
感谢
答
var u = from u in db.users
orderby u.username == 100 ? 1 : 0 descending
select u;
答
这确实对我的作品:
var queryResult =
from o in Source
orderby (o.ColumnThatSaysOrderByColumn1 ? o.Column1 : o.Column2) descending
select o
希望这有助于!
答
看来你不能在动态LINQ查询中使用CASE
。但是你可以使用iif
-keyword:
var query = db.users.OrderByDescending("iif(username = '100', 1, 0)");
的动态LINQ表达的方法和关键字Overview。
我必须使用动态查询,因为,我有一个int [] realUsers = 100,22,77,12等...我想排序用户表基于那个int [],这意味着显示用户首先在“realUsers”中。 – dan 2010-01-06 13:53:23
你可以替换那个u.username == 100? 1:0(几乎)任何你想要订购的逻辑,你基本上只是用C#而不是Sql编写它。不知道如何订购,很难提供比转换原始代码更好的示例... – 2010-01-06 14:03:25