文章出處
文章列表
眾所周知,在linq to entity的查詢語句中,不允許出現ef不能識別的關鍵字,如Trim,Substring,TotalDays等.net里的關鍵字,在EF查詢里都是不被支持的,它的原因可能是為了更好的提高查詢的性能吧,畢竟,好的性能取決于你的程序標準,有了一個嚴格的標準,才能設計出好的程序來.
今天主要說一下,EF為日期方法留的一個后門,<后門>這個詞大家在中國社會都應該知道了,顧名思義,就是反著原則走,你的原則對我沒有用,哈哈!這東西有時候是有用的,因為在大的原則下,很可能一些需求無法實現,這時,就需要后門了!
EF里的后門類:
System.Data.Objects.SqlClient.SqlFunctions
下面我們看一個例子,這個例子涉及到了一個根據時間的查詢
public System.Linq.Expressions.Expression<Func<Classroom_Live, bool>> SatisfiedBy() { Specification<Classroom_Live> spec = new TrueSpecification<Classroom_Live>(); if (_status.HasValue) { if (_status.Value == 0) spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditNotPass) > 0 || (o.Status & (int)Status.Auditing) > 0 || DateTime.Now < o.BeginTime); else if (_status == 1) spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditPass) > 0 && System.Data.Objects.SqlClient.SqlFunctions.DateDiff("mi", DateTime.Now, o.BeginTime) < o.Minutes); else spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditPass) > 0 && System.Data.Objects.SqlClient.SqlFunctions.DateDiff("mi", DateTime.Now, o.BeginTime) > o.Minutes); } return spec.SatisfiedBy(); }
下面是關于dataPart參數的說明,來自http://www.w3school.com.cn/sql/func_datediff.asp
datepart | 縮寫 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小時 | hh |
分鐘 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
納秒 | ns |
文章列表
全站熱搜