刚开始使用NHibernate并使用Nhib 3.0(3.0.0.2001)Linq以及以下型号
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 requ0_.State_id=@p1 ]
Name:p1 - Value:a2e63925-6628-4786-a621-9e5200d5ab71
但是,使用SingleOrDefault可以正常工作。
_session.Query<Request>().Where(x => x.State.Id==someGuidValue).SingleOrDefault();
任何见解都将受到赞赏。感谢
答案 0 :(得分:1)
我相信当多个记录符合您的选择条件时,SingleOrDefault
会出错。无论返回多少记录,FirstOrDefault
只会拉出第一个。
这就是它在LINQ-To-SQL中的工作原理