已编译查询
对于一些在项目中经常被用到的查询可以封装成已编译查询,这样就能提高执行效率:
static class Queries
{
public static Func<NorthwindDataContext, string, IQueryable<Customer>>
CustomersByCity = CompiledQuery.Compile((NorthwindDataContext ctx, string
city) => from c in ctx.Customers where c.City == city select c);
}
调用查询方式如下:
GridView1.DataSource = Queries.CustomersByCity(ctx, "London");
GridView1.DataBind();
获取一些信息
var query = from c in ctx.Customers select c;
Response.Write("Provider类型:" + ctx.Mapping.ProviderType + "<br/>");
Response.Write("数据库:" + ctx.Mapping.DatabaseName + "<br/>");
Response.Write("表:" + ctx.Mapping.GetTable(typeof(Customer)).TableName +
"<br/>");
Response.Write("表达式:" + query.Expression.ToString() + "<br/>");
Response.Write("sql:" + query.Provider.ToString() + "<br/>");
上面的代码执行结果如下:
Provider 类型:System.Data.Linq.SqlClient.SqlProvider
数据库:Northwind
表:dbo.Customers
表达式:Table(Customer).Select(c=> c)
sql:SELECT [t0].[CustomerID], [t0].[CompanyName],[t0].[ContactName],
[t0].[ContactTitle], [t0].[Address],[t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country],
[t0].[Phone], [t0].[Fax] FROM[dbo].[Customers] AS [t0]