C# LINQtoSQL或linq在什么时候向数据库发送请求

C# LINQtoSQL或linq在什么时候向数据库发送请求,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我想让我的查询变得更好,但一直无法找到一个资源,当查询被发送到数据库时,该资源会显示出来 DBContext db = new DBContext(); Order _order = (from o in db where o.OrderID == "qwerty-asdf-xcvb" select o).FirstOrDefault(); String _custName = _order.Customer.Name +" "+_

我想让我的查询变得更好,但一直无法找到一个资源,当查询被发送到数据库时,该资源会显示出来

DBContext db = new DBContext();
Order _order = (from o in db
                where o.OrderID == "qwerty-asdf-xcvb"
                select o).FirstOrDefault();
String _custName = _order.Customer.Name +" "+_order.Customer.Surname;
_custName的分配是否需要向数据库发出任何请求

\u custName
的分配是否需要向数据库发出任何请求

这取决于是否延迟加载
Order.Customer
。如果它是惰性加载的,则是。否则,不会

顺便说一句,如果设置
DataContext.Log
属性,您可以轻松地对此进行调查:

db.Log = Console.Out;
然后可以在控制台上查看SQL语句。通过单步执行程序,您可以准确地看到SQL语句何时到达数据库


请在上查看MSDN。特别是,你可以。请注意。

仅供参考,除了延迟加载之外,还有另一个原因可以解释为什么在使用LINQ时,数据库活动可能不会在您预期的时间内发生。例如,如果我稍微更改您的示例代码:

DBContext db = new DBContext();
var orders = (from o in db
            where o.OrderID == "qwerty-asdf-xcvb"
            select o);
var order = orders.FirstOrDefault();
String _custName = _order.Customer.Name +" "+_order.Customer.Surname;

不熟悉LINQ工作原理的人可能希望在执行第二行代码时从数据库检索所有订单。事实上,LINQ将查询数据库延迟到最后一个可能的时刻,在本例中,这是对FirstOrDefault的调用。当然,此时LINQ知道最多只能检索一条记录。

任何指向资源的链接都将受到欢迎。