• EF 多种查询方式


    比较常用的查询方式linq to entity,这里先看一种写法:

       var query = (from d in testContext.Set<DepartPerson>()
                            //查询和sql很像,不过这里注意,查询多条件不是and
                             where 1 == 1 && 2 == 2 && 3 == 3
                             select new Dep_Person
                             {
                                 Name = p.Name,
                                 ID = p.ID
                             }).ToList()

    当然还有另外一种写法,改用lambda表达式查询:

      var personIDList = testContext.Set<Person>().Where(p=>p.Name=="张三").Select(d=>new {ID=d.ID,Name=d.ID}).ToList();

    实际应用中我们经常会碰到多表关联查询,以及多条件查询,下面看一下代码 怎么写:

      var query = (from d in testContext.Set<DepartPerson>()
                             join p in testContext.Set<Person>()
                             on new { id = d.PersonID, hosID = d.HospitalID } equals new { id = p.ID, hosID = "2" }
                             where 1 == 1 && 2 == 2 && 3 == 3
                             select new Dep_Person
                             {
                                 Name = p.Name,
                                 ID = p.ID,
                                 DepID = d.ID,
                                 HosID = d.HospitalID
    
                             }).ToList();

    实际上也可以用lambda表达式

      var personIDList = testContext.Set<Person>().Where(p=>p.Name=="张三").Select(d=>new {ID=d.ID,Name=d.ID}).ToList();
                 var list = testContext.Set<DepartPerson>().Where(d => personIDList.Contains(d.PersonID)).ToList();

    还有一些操作,orderby 和groupby 这些和sql语句的很像,也容易理解,不再多说,这里说一下去重,官方提供的去重方法Distinct()是针对所有列去重,但是很多时候,如果我们想针对某一列去重,应该怎么做呢

    方法一:利用groupby

    var list = query.ToList().GroupBy(c => c.Name).Select(x => x.First()).ToList();

    方法二:实现第三方扩展

     public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
            {
    
                HashSet<TKey> seenKeys = new HashSet<TKey>();
                foreach (TSource element in source)
                {
                    if (seenKeys.Add(keySelector(element)))
                    {
                        yield return element;
                    }
                }
            }

    方法二使用也很简单

     var query = (from d in testContext.Set<DepartPerson>()
                             join p in testContext.Set<Person>()
                             on new { id = d.PersonID, hosID = d.HospitalID } equals new { id = p.ID, hosID = "2" }
                             where 1 == 1 && 2 == 2 && 3 == 3
                             select new Dep_Person
                             {
                                 Name = p.Name,
                                 ID = p.ID,
                                 DepID = d.ID,
                                 HosID = d.HospitalID
    
                             }).DistinctByAll(c=>c.Name).ToList();

    掌握了这些方法,日常得查询业务需求应该能满足了,当然如果你自己想自定义sql查询(拼接sql语句)可以这么做

            List<Dep_Person> peopleViews = testContext.Database.SqlQuery<Dep_Person>("SELECT Name, ID FROM Person").ToList();

    这种方法注意的是,加入参数最好是格式化参数,不要直接拼接,以防sql注入

  • 相关阅读:
    Java关键字instanceof
    java中equals和==的区别
    Servlet、Filter、Listener总结
    struts2 拦截器配置
    Struts2技术详解
    构建Java并发模型框架
    基于MINA框架快速开发网络应用程序
    Spring的IOC原理
    Spring AOP原理及拦截器
    JAVA三大框架SSH和MVC
  • 原文地址:https://www.cnblogs.com/yaphetsfang/p/9391565.html
Copyright © 2020-2023  润新知