EF架构~有时使用SQL更方便

回到目录

在进行统计时,尤其是按月进行统计,由于我们采用的时间是一个2015-12-12日这种,所以在linq你无法进行拆分,你拆分了在发到SQL时也会报错,因为SQL那边更新不需要你.net的方法,人家SQL只认自己的方法,哈哈,这也是正常的,为了解决这个问题,我们有时也需要使用纯SQL,当前也是基于EF的,通过EF的上下文把SQL语句发到数据库。

下面是一个比较复杂的统计,按月把某个用户的某个任务进行求和及求总数的统计,看一下代码

       var idArr = user_FighterRepository.GetModel(i => i.ParentID == companyId).Select(i => i.UserID).ToList();
            string para= string.Join(",", idArr);
            var linq = Db.Database.SqlQuery<FighterTaskTotalDTO>(
             @"SELECT  CONVERT(CHAR(7), Day, 120) as TotalDate,
                                    COUNT(*)  as TaskCount,
                                    FighterID ,
                                    SUM(FinishedNumber) as FinishedCount
                            FROM    dbo.Count_Fighter_ByDay
                            GROUP BY FighterID ,
                                    CONVERT(CHAR(7), Day, 120)
                            HAVING  FighterID IN ("+para+")");
            return linq.ToList();

看你下SQL的结果

再看一下网页上显示的结果

最后需要注意一点,就是你的SQL语句的每个字段必须要有别名,如你的count(*)统计,需要为它起的别名,并且你的别名要和EF映射的实体属性对应!

回到目录

时间: 2024-08-13 19:09:45

EF架构~有时使用SQL更方便的相关文章

EF架构~过滤导航属性等,拼接SQL字符串

拼接T-SQL串,并使它具有通用性 好处:与服务器建立一次连接,给服务器发一条SQL命令,即可实现 代码如下: 1 /// <summary> 2 /// 构建Insert语句串 3 /// 主键为自增时,如果主键值为0,我们将主键插入到SQL串中 4 /// </summary> 5 /// <typeparam name="TEntity"></typeparam> 6 /// <param name="entity&

EF架构~基于EF数据层的实现

回到目录 之前写过关于实现一个完整的EF架构的文章,文章的阅读量也是满大的,自己很欣慰,但是,那篇文章是我2011年写的,所以,技术有些不成熟,所以今天把我的2014年写的EF底层架构公开一下,这个架构比2011年的有了很大程度的提高,主要在接口规范,查询规范上,并引入了排序功能,两步对完善了EF对数据的批量操作,可以说,这次的架构是很有看点的. 一 一个基础操作接口 /// <summary> /// 基础的数据操作规范 /// 与ORM架构无关 /// </summary> /

EF架构~在Linq to Entity中使用日期函數

回到目录 眾所周知,在linq to entity的查询语句中,不允许出现ef不能识别的关键字,如Trim,Substring,TotalDays等.net里的关键字,在EF查询里都是不被支持的,它的原因可能是为了更好的提高查询的性能吧,毕竟,好的性能取决于你的程序标准,有了一个严格的标准,才能设计出好的程序来. 今天主要说一下,EF为日期方法留的一个后门,<后门>这个词大家在中国社会都应该知道了,顾名思义,就是反着原则走,你的原则对我没有用,哈哈!这东西有时候是有用的,因为在大的原则下,很可

第四十回 EF架构~LinqToEntity里实现left join的一对一与一对多

回到目录 对于linq to sql里实现left join我已经介绍过了,这篇文章的出现是由于最近在项目里遇到的一个问题,解决这个问题花了我不少时间,可能有2个小时,事件是这样的,对于两个表,它们是一对多关系,而需求是返回一个一对一的关系,并将最新的数据返回,这个很多同学都知道,可以使用inner join,但是,对于inner  join来说,当处理的是一对多关系时,它将会出现多条记录,这也是正常的:而它并不满足我们今天的需求,经过测试后,找到了解决这个问题的方法,下面看代码: 一对多关系

EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~终结~配置的优化和事务里读写的统一

回到目录 本讲是通过DbCommand拦截器来实现读写分离的最后一讲,对之前几篇文章做了一个优化,无论是程序可读性还是实用性上都有一个提升,在配置信息这块,去除了字符串方式的拼接,取而代之的是section数组,这样在修改配置时更加清晰了:而实用性上,彻底改变了读和写不能共用一个仓储对象的缺点,并且在一个事务里可以读写并存,并为了数据的一致性,使事务里的curd操作指向主库,这一点很重要! 前几篇文章的目录 EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~再续~添加对各只读服

Linq to EF 和 Linq to SQL 中间Linq 产生的SQL语句

一,Linq to EF using System; using System.Runtime.CompilerServices; using System.Linq; using System.Data; namespace EntityframeworkSQL { class Program { static void Main(string[] args) { using (CustomerEntities customerEntities = new CustomerEntities()

DbCommandInterceptor抓取EF执行时的SQL语句

EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; /// <summary> /// 抓取EF执行时的SQL语句 /// </summary> public class EFIntercepterLogging : DbComman

EF架构~为EF DbContext生成的实体添加注释(T5模板应用)

相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回EF架构~为EF DbContext生成的实体添加注释(T5模板应用) 嗨,没法说,EF4的TT模版加上注释后,升级到EF5的TT模版后,注释就不通用了,所以,还得再研究一下,然后把操作方法再分享出来,没辙的微软! T4模版可能有些凌乱,这在T5模版里有了不错的改进,但我希望解决的问题在T5里并没有得到解决,那就是TT类文件自动得到E

批量更改数据库表架构(生成sql后直接执行!)

批量更改数据库表架构(生成sql后直接执行!) use my_test; --当前数据库 declare @alltable varchar(1000), @SchemaOld varchar(1000), @SchemaNew varchar(1000), @NewSql VARCHAR(max), @Index INT; SET @SchemaOld='';--原架构名称 SET @SchemaNew='';--新架构名称 SET @NewSql=''; SET @Index=1; SELE