zoukankan      html  css  js  c++  java
  • EF写distinct

    在日常开发中常常是这么写的

     var logErrorRequest = from l in _logErrorRepository.Table
                                          select new
                                          {
                                              WrongTime = l.WrongTime,
                                              InstitutionlGuid = l.InstitutionlGuid,
                                              DataSource = l.DataSource,
                                              AccessionNumber = l.AccessionNumber,
                                              ServiceSectID = l.ExamineType,
                                              BusinessID = l.BusinessID
                                          };
                    if (query.InstitutionGuid != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.InstitutionlGuid == query.InstitutionGuid);
                    }
                    if (query.LastUpdateDateStart != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.WrongTime >= query.LastUpdateDateStart);
                    }
                    if (query.LastUpdateDateEnd != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.WrongTime <= query.LastUpdateDateEnd);
                    }
                    var result = logErrorRequest.Distinct();

    但是实际上想要

    Distinct的字段只有
     InstitutionlGuid,DataSource,AccessionNumber三个字段,可是如果只查询这三个的话下面的条件中的字段就会编译报错,为了只查询这三个字段并且还能使条件的字段可以使用,可以改造成如下写法:
        var logErrorRequest = from l in _logErrorRepository.Table
                                          select l;
                    //直接写所有字段,这样就可以使用条件字段
                    if (query.InstitutionGuid != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.InstitutionlGuid == query.InstitutionGuid);
                    }
                    if (query.LastUpdateDateStart != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.WrongTime >= query.LastUpdateDateStart);
                    }
                    if (query.LastUpdateDateEnd != null)
                    {
                        logErrorRequest = logErrorRequest.Where(t => t.WrongTime <= query.LastUpdateDateEnd);
                    }
                    //在distinct的时候才会去查询,所以这里就可以select需要distinct的字段,然后再查询
                    var result = logErrorRequest.Select(t=>new {t.InstitutionlGuid,t.DataSource,t.AccessionNumber }).Distinct();
     
  • 相关阅读:
    A query was run and no Result Maps were found for the Mapped Statement 'com.demo.dao.UserDao.check'. It's likely that neither a Result Type nor a Result Map was specified.
    layui监听input内容变动简单粗暴
    Java多线程中
    Java 对象内存分析
    MySQL重做日志
    并查集-Java实现
    java虚拟机类加载机制
    Java的23种设计模式概述
    redo log 有什么作用?
    什么是redo log ?
  • 原文地址:https://www.cnblogs.com/llcdbk/p/7419688.html
Copyright © 2011-2022 走看看