Có thể ai đó chỉ ra tại sao điều này có thể xảy ra:C# lambda lạ hành vi
Tôi đang sử dụng NHibernate
và Linq
cung cấp cho nó.
Các mã mà không được liệt kê ở đây:
var sequence = session.Query<T>();
var wtfSequence = sequence.Where(x => true);
var okaySequence = sequence.Where(x => x.Id > 0);
Debugging cho thấy sequence
(mà là một IQueryable<T>
) sau này có chứa 2 thành phần, được bổ sung vào cơ sở dữ liệu.
Tôi mong đợi câu lệnh Where
đầu tiên mang lại tất cả các phần tử từ chuỗi đó, nhưng tiếc là nó để lại 0 phần tử.
(TẠI SAO ???)
Thứ hai Where
tuyên bố, ngược lại, thực sự mang lại 2 yếu tố như nó phải làm việc.
Dưới đây là các truy vấn NHibernate -> Sqlite
cho câu lệnh Where
đầu tiên và thứ hai.
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)]
Bây giờ, nếu tôi thử nghiệm cùng mã với InMemoryRepository
của tôi, mà các cửa hàng mỗi thực thể trong một danh sách đơn giản, (x => true)
hoạt động tốt absolutelty.
Vậy - tại sao điều này xảy ra khi sử dụng NHibernate
? Đây có phải là một lỗi hoặc tôi đang làm điều gì sai?
Cảm ơn bạn.
Nó rất có thể liên quan đến cách NHibernate xử lý biểu thức nó tạo ra từ lambda, mặc dù lòng tốt biết những gì nó đang làm ... – Massif