我有以下LINQ查询:
using (var db = new MyDataContext()) {
int[] onlineUsers = GetOnline();
var users = (from u in db.Users orderby
(onlineUsers.Contains(u.u_username) &&
u.u_hasvisible_photo) descending,
u.u_lastlogin descending select
u.u_username).Skip(startRowIndex).
Take(maximumRows).ToList();
}
这可以正常工作,并使用IN操作符生成SQL查询。
问题是int[]中的每个int都是通过不同的参数传递的,我知道SQL每个查询的参数限制为2100个。
我认为使用LINQ动态库OrderBy进行排序会更好。
使用.OrderBy(orderquery)代替“onlineUsers.Contains(u.u_username)&& u.u_hasvisible_photo)descending”。
我已经在网上搜索了指南或示例来实现这一点,但找不到任何帮助。社区能否提供代码或链接来帮助我实现这一点?
2条答案
按热度按时间8fsztsew1#
如果你使用的是SQL Server 2008,你可以创建一个标量函数,它接受一个table-valued parameter,然后将数组作为table-valued parameter传入。不过,这可能需要从LINQ提供程序中进行特殊的引导(你没有指定你使用的是哪一个(Linq-to-Entities还是Linq-to-SQL,我假设是SQL Server,尽管你只是说“sql”),所以我不确定查询的可组合性如何。
你可能想做的是创建一个table valued user-defined function,它接受表值参数(以及你可能有的任何其他参数),并通过LINQ公开它(你应该能够从表值函数创建一些可组合的东西),然后从那里继续。
kkbh8khc2#
这里有一个Linq to SQL的动态排序示例,示例使用的是Northwind数据库,您可以简单地使用**LinqPad**进行尝试:
尝试用
"ProductName"
(变量SortExpression
)替换"Total"
,或者使用false
(变量sortAscending
)进行降序排序。