2009-08-03 29 views
7

Bất cứ ai cũng biết làm thế nào để sử dụng Projections.Conditional để sản xuất cái gì đó như "trường hợp ... khi ..."Projections.Conditional - Cách sử dụng?

Đoạn mã dưới đây đưa ra một truy vấn sai:

IProjection isError = Projections.Conditional(Expression.Eq("event.LogLevel", eLogLevel.Fatal.ToString()), Projections.Constant(1), Projections.Constant(0)); 

ICriteria criteria = Session.CreateCriteria(typeof(LogEvent), "event") 
    .Add(Restrictions.Eq("event.ApplID", "LogEventViewer")) 
    .SetProjection(Projections.ProjectionList() 
    .Add(Projections.GroupProperty("event.ApplID")) 
    .Add(Projections.RowCount(), "TotalCount") 
    .Add(Projections.Sum(isError), "ErrorCount") 
); 

Những tuyên bố sản xuất là không đầy đủ và thứ tự của các tham số là sai.

exec sp_executesql N' 
    SELECT this_.strApplID as y0_ 
    , count(distinct this_.lngLogEventID) as y1_ 
    , sum((case when this_.strLogLevel = ? then ? else ? end)) as y2_ 
    , this_.strApplID as y3_ 
    FROM qryLogEvent this_ 
    WHERE this_.strApplID = @p0 
    GROUP BY this_.strApplID' 
,N'@p0 nvarchar(5),@p1 int,@p2 int,@p3 nvarchar(14)' 
,@p0=N'Fatal',@p1=1,@p2=0,@p3=N'LogEventViewer' 

cách chính xác để sử dụng Projections.Conditional là gì?

+0

Tôi nghĩ đó là lỗi. Tôi đã thử nhiều cách, và thứ tự của các tham số bị rối lên. Bạn đang sử dụng phiên bản NH nào? – asgerhallas

Trả lời

2

CẬP NHẬT: Sự cố (NH1911) hiện được đánh dấu là cố định trong phiên bản 2.1.1.GA. Hãy thử kiểm tra điều đó!


Dường như sử dụng các tham số có tên và vị trí cùng nhau. Nó dường như là một lỗi, như bạn phải đi đến kết luận quá:

https://nhibernate.jira.com/browse/NH-1911

Projections.Constant sử dụng vị trí và Restriction.Eq sử dụng tên thông số. Điều đó làm rối trật tự như được mô tả ở đây, mặc dù vấn đề này phải được khắc phục:

https://forum.hibernate.org/viewtopic.php?f=25&t=985944&start=0

+0

NH-1098 dường như không giải quyết được vấn đề của tôi. Chúng tôi sử dụng GA phiên bản 2.1.0. – Caro

+1

Ok. Nhưng những gì tôi đã cố gắng để nói, là nó đã được một vấn đề một lúc, và đã không được cố định trong các phiên bản trước đó - và bạn đang sử dụng Projections.Conditional chính xác. Và có vẻ như bạn đã báo cáo nó như là một lỗi cho NH Jira? – asgerhallas

+1

Sự cố (NH1911) hiện được đánh dấu là cố định trong phiên bản 2.1.1.GA. Hãy thử kiểm tra xem nó ra. – asgerhallas