步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数

[索引页]
[源码下载]


步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载


作者:webabcd


介绍
以Northwind为示例数据库,DLINQ(LINQ to SQL)之调用标量值用户自定义函数;调用表值用户自定义函数;使用数据加载选项加载数据;相关信息的获取;字段的延迟加载;在不同的DataContext之间做更新缓存


示例
Others.aspx.cs
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Data; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Configuration; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Collections; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Linq; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web.Security; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web.UI; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web.UI.WebControls; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web.UI.WebControls.WebParts; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Web.UI.HtmlControls; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using System.Xml.Linq; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数using DAL; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数public partial class LINQ_DLINQ_Others : System.Web.UI.Page 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        protected void Page_Load(object sender, EventArgs e) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 调用标量值用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Call_HelloFunctionScalar(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 调用表值用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Call_HelloFunctionTable(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 不使用数据加载选项 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                DataLoadOptions_Original(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 使用数据加载选项加载数据 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                DataLoadOptions_LoadWith(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 使用数据加载选项加载数据,并且限制所要加载的数据 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                DataLoadOptions_AssociateWith(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 相关信息的获取 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                GetInfo(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 字段的延迟加载 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                DelayLoaded(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 在不同的DataContext之间做更新 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                IsVersion(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 缓存 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                ShowCache(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数}
 
调用标量值用户自定义函数
ALTER FUNCTION dbo.fnHelloFunctionScalar 

        @param nvarchar(100) 

RETURNS nvarchar(200) 

AS 

BEGIN 
         
        RETURN 'Hello:' + @param 
         
END
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 /// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 调用标量值用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void Call_HelloFunctionScalar() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += ctx.HelloFunctionScalar("webabcd"); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
运行结果
Hello:webabcd

调用表值用户自定义函数
ALTER FUNCTION dbo.fnHelloFunctionTable 

        @ID int, 
        @name nvarchar(100) 

RETURNS @tbl TABLE ([ID] int, [Name] nvarchar(100)) 
AS 

BEGIN 
         
        INSERT INTO @tbl VALUES (@ID, @name) 
                     
        RETURN 
         
END
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 调用表值用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void Call_HelloFunctionTable() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var p = (ctx.HelloFunctionTable(1, "webabcd")).Single(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "ID:" + p.ID; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "Name:" + p.Name; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
运行结果
ID:1
Name:webabcd


不使用数据加载选项
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 不使用数据加载选项 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void DataLoadOptions_Original() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var categories = from c in ctx.Categories select c; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                foreach (var c in categories) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        // 每一次迭代都会执行一条SQL语句来返回当前Category的Product 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        foreach (var p in c.Products) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                                string productName = p.ProductName + "<br>"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
//SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture] 
//FROM [dbo].[Categories] AS [t0] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [2] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [3] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [4] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [5] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [6] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [7] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
//FROM [dbo].[Products] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [8] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 
使用数据加载选项加载数据
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 使用数据加载选项加载数据 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void DataLoadOptions_LoadWith() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                System.Data.Linq.DataLoadOptions options = new System.Data.Linq.DataLoadOptions(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // Category以LEFT JOIN的方式关联Product 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                options.LoadWith<Categories>(c => c.Products); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                ctx.LoadOptions = options; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var categories = from c in ctx.Categories select c; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                foreach (var c in categories) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        foreach (var p in c.Products) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                                string productName = p.ProductName + "<br>"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
//SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture], [t1].[ProductID], [t1].[ProductName], [t1].[SupplierID], [t1].[CategoryID] AS [CategoryID2], [t1].[QuantityPerUnit], [t1].[UnitPrice], [t1].[UnitsInStock], [t1].[UnitsOnOrder], [t1].[ReorderLevel], [t1].[Discontinued], ( 
//        SELECT COUNT(*) 
//        FROM [dbo].[Products] AS [t2] 
//        WHERE [t2].[CategoryID] = [t0].[CategoryID] 
//        ) AS [count
//FROM [dbo].[Categories] AS [t0] 
//LEFT OUTER JOIN [dbo].[Products] AS [t1] ON [t1].[CategoryID] = [t0].[CategoryID] 
//ORDER BY [t0].[CategoryID], [t1].[ProductID] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 

使用数据加载选项加载数据,并且限制所要加载的数据
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 使用数据加载选项加载数据,并且限制所要加载的数据 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void DataLoadOptions_AssociateWith() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                System.Data.Linq.DataLoadOptions options = new System.Data.Linq.DataLoadOptions(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // Category以LEFT JOIN的方式关联Product 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                options.LoadWith<Categories>(c => c.Products); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 限制所关联的Product 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                options.AssociateWith<Categories>(c => c.Products.Where(p => p.UnitPrice > 20)); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                ctx.LoadOptions = options; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var categories = from c in ctx.Categories select c; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                foreach (var c in categories) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        foreach (var p in c.Products) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                                string productName = p.ProductName + "<br>"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
//SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture], [t1].[ProductID], [t1].[ProductName], [t1].[SupplierID], [t1].[CategoryID] AS [CategoryID2], [t1].[QuantityPerUnit], [t1].[UnitPrice], [t1].[UnitsInStock], [t1].[UnitsOnOrder], [t1].[ReorderLevel], [t1].[Discontinued], ( 
//        SELECT COUNT(*) 
//        FROM [dbo].[Products] AS [t2] 
//        WHERE ([t2].[UnitPrice] > @p0) AND ([t2].[CategoryID] = [t0].[CategoryID]) 
//        ) AS [count
//FROM [dbo].[Categories] AS [t0] 
//LEFT OUTER JOIN [dbo].[Products] AS [t1] ON ([t1].[UnitPrice] > @p0) AND ([t1].[CategoryID] = [t0].[CategoryID]) 
//ORDER BY [t0].[CategoryID], [t1].[ProductID] 
//-- @p0: Input Currency (Size = 0; Prec = 19; Scale = 4) [20] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 
相关信息的获取
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 相关信息的获取 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void GetInfo() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var categories = from c in ctx.Categories select c; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "ProviderType:" + ctx.Mapping.ProviderType.ToString() + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "DatabaseName:" + ctx.Mapping.DatabaseName + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "ContextType:" + ctx.Mapping.ContextType.ToString() + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "TableName:" + ctx.Mapping.GetTable(typeof(Categories)).TableName + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "Expression:" + categories.Expression.ToString() + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                result.InnerHtml += "T-SQL:" + categories.Provider.ToString() + "<br />"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
 
运行结果
ProviderType:System.Data.Linq.SqlClient.SqlProvider
DatabaseName:C:\DOCUMENTS AND SETTINGS\WANGLEI\桌面\VS2008\WEB\APP_DATA\NORTHWIND.MDF
ContextType:DAL.NorthwindDataContext
TableName:dbo.Categories
Expression:Table(Categories).Select(c => c)
T-SQL:SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description] FROM [dbo].[Categories] AS [t0]


字段的延迟加载
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 字段的延迟加载 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void DelayLoaded() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 在对象关系设计器(Object Relational Designer)中设置Categories实体的Picture属性的Delay Loaded为True 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                var category = (from c in ctx.Categories 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                                                select c).Single(c => c.CategoryID == 1); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                System.Data.Linq.Binary b = category.Picture; 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
//SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description] 
//FROM [dbo].[Categories] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

//SELECT [t0].[Picture] 
//FROM [dbo].[Categories] AS [t0] 
//WHERE [t0].[CategoryID] = @p0 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 
在不同的DataContext之间做更新
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 在不同的DataContext之间做更新 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void IsVersion() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 在Categories实体的主键上添加属性IsVersion=true,即Time Stamp为True 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories c = null
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                using (NorthwindDataContext ctx = new NorthwindDataContext()) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        ctx.DeferredLoadingEnabled = false
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        c = ctx.Categories.First(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        c.Description = "webabcd"
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                using (NorthwindDataContext ctx = new NorthwindDataContext()) 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        ctx.Categories.Attach(c, true); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                        ctx.SubmitChanges(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                } 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
//UPDATE [dbo].[Categories] 
//SET [CategoryName] = @p2, [Description] = @p3 
//WHERE ([CategoryID] = @p0) AND ([CategoryID] = @p1) 
//-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] 
//-- @p1: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] 
//-- @p2: Input String (Size = 9; Prec = 0; Scale = 0) [Beverages] 
//-- @p3: Input String (Size = 7; Prec = 0; Scale = 0) [webabcd] 
//-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 
缓存
/// <summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// 缓存 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        /// </summary> 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        void ShowCache() 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        { 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                // 查询后数据会被缓存,如果之后以主键查询的话,会先在缓存里查找 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                NorthwindDataContext ctx = new NorthwindDataContext(); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category = ctx.Categories.Single(c => c.CategoryName == "Beverages"); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category2 = ctx.Categories.Single(c => c.CategoryName == "Beverages"); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category3 = ctx.Categories.Single(c => c.CategoryID == 1); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category4 = ctx.Categories.Single(c => c.CategoryID == 1); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category5 = ctx.Categories.Single(c => c.CategoryID == 2); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数                Categories category6 = ctx.Categories.Single(c => c.CategoryID == 2); 
步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数        }
SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description] 
FROM [dbo].[Categories] AS [t0] 
WHERE [t0].[CategoryName] = @p0 
-- @p0: Input String (Size = 9; Prec = 0; Scale = 0) [Beverages] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description] 
FROM [dbo].[Categories] AS [t0] 
WHERE [t0].[CategoryName] = @p0 
-- @p0: Input String (Size = 9; Prec = 0; Scale = 0) [Beverages] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description] 
FROM [dbo].[Categories] AS [t0] 
WHERE [t0].[CategoryID] = @p0 
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [2] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 





     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/345019,如需转载请自行联系原作者
上一篇:Docker 开启远程连接_04


下一篇:定制并发类(七)实现ThreadFactory接口生成自定义的线程给Fork/Join框架