c# – 如何让linq生成我想要的sql?
对我来说,提出一些精心设计的SQL集处理代码来解决各种领域模型问题是第二天性.但是,趋势是不再触摸SQL.是否有一些模式引用或转换工具可以帮助将各种SQL模式转换为
Linq语法?
我会查找代码如下代码的方法:(这有一个子查询): 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] )) 这就是我们想要的,而不是我的预期.所以,这是记忆的一种模式. 解决方法
如果您有手写SQL,则可以使用ExecuteQuery,将“row”类的类型指定为函数模板参数:
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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |