当前位置:Gxlcms > 数据库问题 > Linq To Sql进阶系列(六)用object的动态查询与保存log篇

Linq To Sql进阶系列(六)用object的动态查询与保存log篇

时间:2021-07-01 10:21:17 帮助过:29人阅读

4,测试用例及反思
我们用下面的例子来测试下这个函数

技术分享            Customer c = new Customer();
技术分享            c.City = "London";
技术分享            c.Phone = "23236133";
技术分享
技术分享            var q = db.Find<Customer>(c).ToList();

其生成的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]
技术分享WHERE ([t0].[Phone] = @p0) AND ([t0].[City] = @p1)
技术分享-- @p0: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [23236133]
技术分享-- @p1: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

我们可以看到,其sql语句中,只有city和phone两个条件。并且他们之间是and的关系。我们最开始的设想实现了,但是,它是完美的吗?如果是or条件该怎么办呢?更多的时候,我们是在用模糊查询,那又该怎么办呢?这个问题,就留于下篇。

最后,介绍一种写log的方法。stream流使用static为避免多个datacontext的同时在使用log.txt文件。

技术分享    partial class DataMappingDataContext
技术分享    {
技术分享        private static StreamWriter sw = new StreamWriter(Path.Combine(Directory.GetCurrentDirectory(), "log.txt"),true);
技术分享
技术分享        /// <summary>
技术分享        /// Try to create DataContext with log. 
技术分享        /// </summary>
技术分享        /// <param name="withLog"></param>
技术分享
技术分享        public DataMappingDataContext(bool withLog)
技术分享            : this()
技术分享        {
技术分享            OnCreated();
技术分享            if (withLog)
技术分享            {
技术分享                if (sw == null)
技术分享                {
技术分享                    sw = new StreamWriter(Path.Combine(Directory.GetCurrentDirectory(), "log.txt"), true);
技术分享                }
技术分享                this.Log = sw;
技术分享            }
技术分享        }
技术分享
技术分享        /// <summary>
技术分享        /// try to close streamwriter
技术分享        /// </summary>
技术分享        /// <param name="disposing"></param>
技术分享        protected override void Dispose(bool disposing)
技术分享        {
技术分享            base.Dispose(disposing);
技术分享            sw.Flush();
技术分享
技术分享        }
技术分享    }

在dispose函数里,把输出流flush。使用时,如下
using(northwind db = new norhwind(true))
{
//do something......
}
好,就先讲到这里。

Linq To Sql进阶系列(六)用object的动态查询与保存log篇

标签:param   text   div   customer   tom   延迟加载   先来   private   add   

人气教程排行