ObjectQuery.OrderBy()可以使用NEWID()吗?

时间:2010-07-21 01:19:13

标签: sql frameworks entity objectquery

我发现Entity SQL支持NEWID(),但ObjectQuery也支持它吗? http://msdn.microsoft.com/en-us/library/bb738616.aspx

我可以编写如下对象查询:

context.member.orderby( “NEWID()”)选择( “it.UserID”);

或类似的东西?或者我应该用其他方式写作?

我认为如果实体sql支持NEWID()函数,它也应该被ObjectQuery接受。就像你可以在ObjectQuery.Where()或Select()中使用distinct(it.UserID)或BitWiseAND(it.UserID,1)。

非常感谢。

2 个答案:

答案 0 :(得分:0)

这是一个特定于SQL Server的规范函数,所以它应该以'SqlServer'作为前缀:

context.member.orderby("SqlServer.NEWID()").select("it.UserID");

不幸的是,这也不会起作用:Where扩展方法至少需要一个对直接输入范围的引用。

答案 1 :(得分:0)

感谢Devart的回应。

实际上,我发现我可以使用:

var query1 = context.member.select(“it.userid,SqlServer.NEWID()as newid”)。orderby(“it.newid”);

这可以对结果进行随机排序,你会发现NEWID()在翻译的sql查询中。

但是如果你想从'query1'结果集中选择部分结果,你不能写:

var query2 = context.member.select(“it.userid,SqlServer.NEWID()as newid”)。orderby(“it.newid”)。select(“it.userid”);

因为当你使用sql profiler来观察转换成sql server的sql时,你会发现'NEWID()'消失了。

但是,我认为'query2'应该有意义。但它不起作用。