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();
 
时间: 2024-10-01 00:31:56

EF写distinct的相关文章

EF写统计

EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联, 在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计, 例如SQL: -- Region Parameters DECLARE @p0 VarChar(1000) = 'ExamImage' DECLARE @p1 VarChar(1000) = '' DECLARE @p2 Float = 1024 DECLARE @p3 Float = 1024 -- EndRegio

dapper使用(简介转)

访问量不大的项目我都是用EF写数据库操作,因为EF除了速度上慢以外,但开发效率极快,省略了很多sql写法,并能很方便的调用外键.集合等信息,用EF写项目最爽的事.不过有些项目网站要考虑运行速度,这时不得不用其它的ORM框架,我常用dapper,因为它效果快,而且写sql非常灵活,接下来面写一些方法看看dapper的使用 1.连接语句 var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlDiagnostic

[Programming Entity Framework] 第3章 查询实体数据模型(EDM)(一)

http://www.cnblogs.com/sansi/archive/2012/10/18/2729337.html Programming Entity Framework 第二版翻译索引 你可以使用各种方法查询实体数据模型.你选择有些方法是因为个人喜好,而其它的则是因为你可以利用特殊的效益.你很有可能已经听过LINQ to Entities和Entity SQL.你可以使用特殊的方法去查询,比如某些基于LINQ,而其它的基于EF的ObjectQuery类.这此查询方法中的每一个都会产生具

初学C#和MVC的一些心得,弯路,总结,还有教训(2)--关于Entity Framework

---恢复内容开始--- 看了一堆视频教程后,感觉基本了解的差不多了,可以动手.....因为最好的学习方法就是实践嘛.... 所以打算从网站做起,在WebForm和MVC之间选了MVC,因为感觉高大上...也比较灵活 于是买了两本书<ASP.NET MVC 4高级编程(第4版)>和<ASP.NET MVC 4 Web编程>,在群里有群友问,为什么要买两本...其实这是习惯啦...对于初学者来说,最先要了解的就是,这个东西大概是个什么东西....书的作者不同,介绍的侧重点也不同,买两

Entity Framework 第一篇

这段时间研究了orm框架EF 写一写研究的历程和心得 先贴上核心代码 public interface ITransaction { bool IsTransaction { get;} void BeginTransaction(); int Commit(); void Rollback(); } public class BaseRepository : ITransaction, IDisposable { private XFDbContext dbContext; /// <summ

angularjs和ajax的结合使用 (二)

今天我们来继续丰富上次的例子.我们来搞些 稍微复杂点的应用. 首先我们来加一个全选 的功能. 上一篇的例子里我们看到 分页时载入的是我们通过linq 查询自定义列 然后构建的匿名类 .使用这种EF框架+linq 查询的方式 我认为不方便的一点就是 要不你就只能select 一个固定对应表的数据模型类名 ,但是序列化成json的时候对外键类引用有天然的bug  ,就是框架自动序列化成json格式时会出循环引用错误 .序列化类型为XX的对象时检测到循环引用.没办法 我们能做的就是屏蔽某些属性 .方式

Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象

EF写了个简单的框架,在把查询出来的数据修改回去时,报了ObjectStateManager 中已存在具有同一键的对象这样一个错误,寻寻觅觅终于找到了最终的解决方案. ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.InvalidOperationExc

Spark Catalyst源码分析之SqlParser

Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍. 一.SQL Parser入口 Sql Parser 其实是封装了scala.util.parsing.co

第二篇:Spark SQL Catalyst源码分析之SqlParser

/** Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍. 一.SQL Parser入口 Sql Parser 其实是