zoukankan      html  css  js  c++  java
  • Entity FrameWork 笔记(二)4.0中的查询

    这两天一直在用vs2010来试水,发现Entity FrameWork4.0改进了很多,这篇文章先从查询说起。

    工具VS2010+SQL2005

    准备

    首先我们看下生成完成的EDM图:

    image

    编写查询

    1)Linq to Entities

    在开始我还是想像以前一样用Linq to Entities的方式写一个简单的查询:

                using (var ctx = new HJRightPlatEntities())
                {
                    var projects = from pro in ctx.Projects
                                   where pro.ProjectID.Equals("Henllyee")
                                   select pro;
                    Assert.AreEqual(1, projects.Count());
                }
    

    开始编写时,总是获取不到语法的提示,后来才发现是自己没有添加对System.Linq的引用,从而没有Where的扩展方法,真是汗啊。这这里主要是来查询ProjectID为“Henllyee”的Project

    下面我们写一个组联的查询:

            [TestMethod()]
            public void QueryInnerJoinByLinq()
            {
                using (var ctx = new HJRightPlatEntities())
                {
                    var projects = from pro in ctx.Projects
                                   join mo in ctx.Modules
                                   on pro.ProjectID equals mo.ProjectID  into moduleList
                                   where pro.ProjectID.Equals("Henllyee")
                                   select new {
                                       ProjectName=pro.ProjectName,
                                       ModuleList = moduleList
                                   };
                    Assert.AreEqual(7, projects.First().ModuleList.Count());
    
                }
            }
    

    下面是段左联的查询:

            [TestMethod()]
            public void QueryLeftJoinByLinq()
            {
                using (var ctx = new HJRightPlatEntities())
                {
                    var modules = from pro in ctx.Projects
                                   join mo in ctx.Modules
                                   on pro.ProjectID equals mo.ProjectID into moduleList
                                   where pro.ProjectID.Equals("Henllyee")
                                   from prom in moduleList.DefaultIfEmpty()
                                   select new
                                   {
                                       ProjectName = pro.ProjectName,
                                       ModuleName = prom.ModuleName
                                   };
                    Assert.AreEqual(7, modules.Count());
    
                }
            }
    

    这些都是些基本的Linq 语法,就不再举例子了

    2)E-SQL的方式

    第一个实例:

            [TestMethod()]
            public void QueryByESQL()
            {
                using (var ctx = new HJRightPlatEntities())
                { 
                    var projects = ctx.CreateQuery<Projects>(
                        "Select Value p From Projects AS p Where p.ProjectID=@ProjectID",
                        new ObjectParameter("ProjectID","Henllyee"));
    
                    foreach (var pro in projects)
                    {
                        Console.WriteLine("ProjectName:{0}",
                            pro.ProjectName);
                    }
                }
            }

    这个上面的例子中就跟linq to entities的第一个实例差不多

    我们看如何实现左连的实现:

            [TestMethod()]
            public void QueryLeftJoinByESQL()
            {
                using (var ctx = new HJRightPlatEntities())
                {
                    var modules = ctx.CreateQuery<Modules>(
                        "Select Value m From Modules AS m Where m.Projects.ProjectID=@ProjectID",
                        new ObjectParameter("ProjectID","Henllyee")
                        );
                    foreach (var mo in modules)
                    {
                        Console.WriteLine("ModuleName:{0} ProjectName:{1}",
                            mo.ModuleName,
                            mo.Projects.ProjectName);
    
                    }
                }
            }

    其实是通过其外键来实现的,可以看到我们用entity sql是多么轻松地实现左连。这在1.0里面是没有外键查询的支持,而4.0里面已经完全支持了,用了是非常的方便

    结束

    本文粗略的介绍了Entity FrameWrok中Linq to Entities 跟 Entity Sql的两种查询方式。在后面的文章中会对Entity Sql做详细的说明。

    作者:Henllyee Cui
    出处: http://henllyee.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
  • 相关阅读:
    简体中文和繁体中文的转换
    EasyPoi 快速Office 开发
    玩转SpringBoot之定时任务详解
    Spring Boot中使用Swagger2构建强大的RESTful API文档
    一篇文章带你搞懂 SpringBoot与Swagger整合
    JAVA团队开发手册
    CentOS(6、7)修改主机名(hostname)
    SpringBoot多环境部署,在启动时动态设置相应的配置文件
    MyBatis逆向工程代码的生成以及使用详解(持续更新)
    MySQL写入插入数据优化配置
  • 原文地址:https://www.cnblogs.com/Henllyee/p/1714294.html
Copyright © 2011-2022 走看看