SELECT * FROM orders X WHERE (SELECT COUNT(*) FROM orders Y WHERE Y.totalOrder > X.totalOrder) < 6
(以副作用获得前五名最高订单总数)
或者,您如何知道Linq在不使用调试器的情况下作为单个语句执行?我知道你需要遵循枚举,但我会假设只是在某处查找模式.
这是来自MSDN站点,这是他们做sql差异的例子.我可能错了,但我不认为这会在服务器上使用set处理(我认为它会在本地拉出两个集合然后取得差异,这将是非常低效的).我可能错了,这可能是该引用的模式之一.
sql差异示例:
var differenceQuery = (from cust in db.Customers select cust.Country) .Except (from emp in db.Employees select emp.Country);
谢谢
– 更新:
– Microsoft’s 101 Linq Samples in C#是一种在模式中构造linq以生成所需sql的更接近的方法.我会发现更多的帖子.我真的在寻找一种方法(模式或转换工具)来将sql转换为Linq.
– 更新(来自Microsoft在Linq中的差异模式的sql):
SELECT DISTINCT [t0].[field] AS [Field_Name] FROM [left_table] AS [t0] WHERE NOT (EXISTS( SELECT NULL AS [EMPTY] FROM [right_table] AS [t1] WHERE [t0].[field] = [t1].[field] ))
这就是我们想要的,而不是我的预期.所以,这是记忆的一种模式.
解决方法
var myList = DataContext.ExecuteQuery<MyRow>( "select * from myview");
“row”类将列公开为公共属性.例如:
public class MyRow { public int Id { get; set; } public string Name { get; set; } .... }
您可以使用更多信息来装饰列:
public class MyRow { .... [Column(Storage="NameColumn",DbType="VarChar(50)")] public string Name { get; set; } .... }
根据我的经验,linq to sql不会生成非常好的sql代码,并且它确实为大型数据库生成了代码. linq to sql做得非常好,它将存储过程暴露给您的客户端.例如:
var result = DataContext.MyProcedure(a,b,c);
这允许您将sql存储在数据库中,同时具有易于使用,自动生成的.NET包装器的好处.
要查看正在使用的确切sql,可以使用sql Server Profiler工具:
http://msdn.microsoft.com/en-us/library/ms187929.aspx
Linq-to-sql Debug Visualizer:
http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx
http://goneale.wordpress.com/2008/12/31/log-linq-2-sql-query-execution-to-consoledebug-window/