我发现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)。非常感谢。
答案 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'应该有意义。但它不起作用。