- 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/