zoukankan      html  css  js  c++  java
  • Linq TO SQL 虽好,但不要滥用

    看看下面的例子。我们的场景是,需要对客户表按照国家进行分组,然后打印出来每个国家的客户数目。

    下面的语法看起来很优雅

    using System;
    using System.Linq;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (NorthwindDataContext context = new NorthwindDataContext()) {
                    context.Log = Console.Out;
                    var query = from c in context.Customers
                                group c by c.Country;
    
                    foreach (var item in query)
                    {
                        Console.WriteLine(string.Format("国家:{0},客户总数:{1}",item.Key,item.Count()));
                        foreach (var i in item)
                        {
                            Console.WriteLine("\t" + i.CustomerID);
                        }
                    }
                }
            }
        }
    }
    

    但是,注意观察一下,每循环一个国家的时候,又会发起另外一个查询。这对于数据库服务器而言,是一个不小的压力

    image

    为了做改进,考虑到客户数据本身也不是很多,我们直接将需要的数据先读取到内存中,再用LINQ TO Object的方式对其进行出来岂不是更好

    using System;
    using System.Linq;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (NorthwindDataContext context = new NorthwindDataContext()) {
                    context.Log = Console.Out;
    
                    var customers = context.Customers.Select(c => new { c.CustomerID, c.Country }).ToArray();
                    var query = from c in customers
                                group c by c.Country;
    
                    foreach (var item in query)
                    {
                        Console.WriteLine(string.Format("国家:{0},客户总数:{1}", item.Key, item.Count()));
                        foreach (var i in item)
                        {
                            Console.WriteLine("\t" + i.CustomerID);
                        }
                    }
                }
            }
        }
    }
    

    image

     
  • 相关阅读:
    MFC关闭子窗口 如何把父窗口也一起关闭
    VS2010创建动态链接库并且使用动态链接库DLL
    Linux文件处理命令
    Centos ftp服务器安装配置
    PHP数字价格格式化,保留两位小数
    PHP中file_put_contents追加和换行
    如何查看Laravel版本号的三种方法
    性能优化系列一:性能优化介绍与优化的范围
    只需两步获取任何微信小程序源码
    前端网页、php与mysql数据库字符编码(解决中文等乱码问题
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1641578.html
Copyright © 2011-2022 走看看