EF架構~有時使用SQL更方便
在(zai)進(jin)行統(tong)計時(shi)(shi)(shi),尤其是(shi)按月進(jin)行統(tong)計,由于我們(men)(men)采用的(de)時(shi)(shi)(shi)間(jian)是(shi)一個2015-12-12日這(zhe)種,所以在(zai)linq你無法(fa)進(jin)行拆(chai)分,你拆(chai)分了(le)在(zai)發到SQL時(shi)(shi)(shi)也會報錯,因為SQL那邊更新不需(xu)要(yao)(yao)你.net的(de)方法(fa),人家SQL只認(ren)自己的(de)方法(fa),哈哈,這(zhe)也是(shi)正常的(de),為了(le)解決(jue)這(zhe)個問題,我們(men)(men)有時(shi)(shi)(shi)也需(xu)要(yao)(yao)使(shi)用純SQL,當前也是(shi)基于EF的(de),通過EF的(de)上(shang)下文把SQL語(yu)句發到數(shu)據庫。
下面是一(yi)個比較復雜的統(tong)計,按月把某個用戶(hu)的某個任務進(jin)行(xing)求和及求總數的統(tong)計,看一(yi)下代碼
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的結果
再(zai)看一下網(wang)頁上顯示的(de)結果
最后需要注意一點,就是你的SQL語句的每個字段必須要有別名,如你的count(*)統計,需要為它起的別名,并且你的別名要和EF映射的實體屬性對應!