你好,我有一个问题。假设数据库中有两个表:
Clients(
id,
name,
address)
Orders(
id,
name,
desc,
datemodified,
client_id)第二个引用第一个,即每个订单都分配给客户端。现在,假设我有一个带有LinqDataSource for Orders表的.aspx页面,以及一个使用此数据源并显示具有以下列的表的GridView:
G 212
据我所知,Linq to SQL的设计方式是:默认情况下,它不加载任何关联实体,只在请求子属性时才加载。因此,当加载页面时,将出现以下情况:
因此,如果我们有100个订单,这意味着将执行101个查询,而不是一个(甚至是201,如果对每个客户端属性执行一个查询)?如何避免这种情况,并使LinqDataSource通过一个查询加载所有必需的字段?
现在,我看到了解决这个问题的唯一方法--使用带有联接查询的SqlDataSource,它将同时检索所有必需的字段。
发布于 2011-03-06 16:40:00
在LoadOptions事件中设置LinqDataSource.ContextCreated
看看这里怎么做,http://codebetter.com/davidhayden/2007/08/06/linq-to-sql-query-tuning-for-performance-optimization/
发布于 2011-03-04 18:47:01
您可以重写LinqDataSource的LinqDataSource事件,让它使用您要查找的确切数据检索匿名类型:
protected void LinqDataSource_OnSelecting(object sender, LinqDataSourceSelectEventArgs e)
{
DataContext dc = new DataContext();
var query = from o in dc.Orders
select new
{
OrderName = o.name,
OrderDesc = o.desc,
ClientName = o.Client.name,
ClientAddress = o.Client.address
};
// Insert any necessary conditional statements adjustments as needed.
e.Result = query;
}它将发送到数据库的查询将只获取这四个字段,并使用内部联接完成,因此您将只检索每一行的数据一次。
https://stackoverflow.com/questions/5197606
复制相似问题