• C# linq to sql


    参考文章地址:http://www.cnblogs.com/yubaolee/p/BestLinqQuery.html   以下是我自己的总结:

    表结构:

    本文全部代码基于:UserInfo与Class两个表,其中Class中的UserId与UserInfo中的Id对应

    image

    linq联合查询

    内联查询

    内联是一个实际使用频率很高的查询,它查询两个表共有的且都不为空的部分

    1. from user in UserInfo  
    2. join c in Classes on user.Id equals c.UserId  
    3. select new  
    4. {  
    5.     user.UserName,  
    6.     user.Id,  
    7.  c.ClassName  
    8. }  

    查询结果

    image

    左联查询

    左联应该是联合查询中使用频率最高的查询。它以左表为准,进行联合查询。如果右表中不存在对应的结果,则置空。(注意:在Linq中是不存在右联连的说法,因为右联无非是把左边的表移动到右边,查询的结果与左联是一样的)

    1. from user in UserInfo    
    2. join c in Classes on user.Id equals c.UserId into temp    
    3. from c in temp.DefaultIfEmpty()    
    4. select new    
    5. {    
    6.      user.UserName,    
    7.      user.Id,    
    8.      c.ClassName    
    9. }    

    查询结果

    image

    合并(Union)

    这种查询其实也很少用,但在某些变态业务需求下会非常有用,注意查询的结果。它是合并两个表相同列数的结果,并且如果结果中有相同的行,那么只取一行记录。

    1. (  
    2.     from userinfo in UserInfo  
    3.     select new {  
    4.       Id = (System.Int32?)userinfo.Id,  
    5.       Name = userinfo.UserName  
    6.     }  
    7. ).Union  
    8. (  
    9.     from c in Classes  
    10.       select new {  
    11.       Id = (System.Int32?)c.UserId,  
    12.       Name = c.ClassName  
    13.     }  
    14. )  

    查询结果

    image

    Linq 分组查询

    分组查询(group by)也是我们在实际项目中一个常用的操作,查询操作如下:

    1. from c in Classes  
    2. group c by c.UserId into temp  
    3. select temp  

    查询结果

    image

    注意一下查询结果,外层是一个我们常用的IQueryable<T>,里面是一个类似Dictionary的K-V集合。简单点说Group返回的是一个集合的集合,因此输出时需用双重循环。

    我们在使用它的结果时,应该这样调用:

    1. var result = from c in _context.Classes  
    2.                group c by c.UserId  
    3.                into temp  
    4.                select temp;  
    5.   
    6.            foreach (var c in result)  
    7.            {  
    8.                Console.WriteLine(c.Key);  
    9.                foreach (var citem in c)  
    10.                {  
    11.                    Console.WriteLine(citem.ClassName);  
    12.                }  
    13.            }  
    身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃。
  • 相关阅读:
    Coroutine 协程
    jQuery Ajax calls and the Html.AntiForgeryToken()
    CSRF in asp.net mvc and ap.net core
    What is the difference between XSS and CSRF from their execution perspective?
    cocos2d制作动态光晕效果基础——blendFunc
    很有设计感的世界杯
    cocos2d-x (Android)之-那些常见的error记
    cocos2dx libcurl
    如何在遍历中使用 iterator/reverse_iterator 删除元素
    Android ndk下用AssetManager读取assets的资源
  • 原文地址:https://www.cnblogs.com/birdofparadise/p/7079734.html
Copyright © 2020-2023  润新知