2010-12-20 13 views
2

只是NHibernate的開始,並在使用Nhib 3.0的(3.0.0.2001)的LINQ與以下車型Nhibernate如何對待它們有什麼區別.FirstOrDefault vs .SingleOrDefault?可能的錯誤?

public class Request 
{ 
    public virtual Guid Id { get; set; } 
    public virtual State {get;set;} 
} 
public class State 
{ 
    public virtual Guid Id {get;set;} 
} 

所以我只是想找回基於其請求的ID狀態。

_session.Query<Request>().Where(x => x.State.Id==someGuidValue).FirstOrDefault(); 

似乎相當直接的,但是這得基於生成的SQL,SQL錯誤的,它看起來像@ P0參數丟失,雖然不知道你爲什麼它包括在這裏。

{"Line 1: Incorrect syntax near '('."} 
select TOP (@p0) requ0_.Id as Id0_ 
, requ0_.State_id as State8_0_ 
from [Request] requ0_ where [email protected] ] 
    Name:p1 - Value:a2e63925-6628-4786-a621-9e5200d5ab71 

但是,使用SingleOrDefault工作,很好。

_session.Query<Request>().Where(x => x.State.Id==someGuidValue).SingleOrDefault(); 

任何洞察力將不勝感激。謝謝

回答

1

我相信SingleOrDefault將有錯誤,當多個記錄符合您的選擇標準。不管有多少條記錄被返回,FirstOrDefault只會拉第一條。

這就是它在LINQ-SQL中的工作方式

相關問題