可能有人指出,這可能是爲什麼發生的事情:C#奇怪拉姆達行爲
我使用NHibernate
和Linq
提供它。
失敗此處列出的代碼:
var sequence = session.Query<T>();
var wtfSequence = sequence.Where(x => true);
var okaySequence = sequence.Where(x => x.Id > 0);
調試表明sequence
(這是一個IQueryable<T>
)之後這包含2個元素,其中加入到數據庫中。
我期望第一個Where
語句能夠從該序列中產生所有元素,但不幸的是它會留下0個元素。
(WHY ???)
第二Where
語句,相反,實際上產生2種元素作爲它應該工作。
以下是對第一個和第二個Where
語句的NHibernate -> Sqlite
查詢。
NHibernate: select cast(count(*) as INTEGER) as col_0_0_ from "BinaryUnitProxy_IndicatorUnitDescriptor" binaryunit0_ where @p0='true';@p0 = 'True' [Type: String (0)]
NHibernate: select cast(count(*) as INTEGER) as col_0_0_ from "BinaryUnitProxy_IndicatorUnitDescriptor" binaryunit0_ where binaryunit0_.Id>@p0;@p0 = 0 [Type: Int32 (0)]
現在,如果我用我的InMemoryRepository
,存儲每一個實體在一個簡單的列表測試相同的代碼時,(x => true)
工作absolutelty罰款。
所以 - 爲什麼在使用NHibernate
時會發生這種情況?這是一個錯誤還是我做錯了什麼?
謝謝。
這很可能與NHibernate處理它從lambda創建的Expression的方式有關,儘管善良知道它在做什麼...... – Massif 2011-02-08 15:04:56