C# 有限制的NHibernate查询

C# 有限制的NHibernate查询,c#,nhibernate,linq-to-nhibernate,queryover,C#,Nhibernate,Linq To Nhibernate,Queryover,我是NHibernate的新手,正在尝试使用QueryOver。我有下面的问题 var departments = session .QueryOver<Department>() .Where(Restrictions.On<Department>x=> x.Parent.Id).IsIn(new List<int> {100})) .List().ToList(); var部门=会话 .QueryOver() .Where(Res

我是NHibernate的新手,正在尝试使用
QueryOver
。我有下面的问题

var departments = session
   .QueryOver<Department>()
   .Where(Restrictions.On<Department>x=> x.Parent.Id).IsIn(new List<int> {100}))
   .List().ToList();
var部门=会话
.QueryOver()
.Where(Restrictions.Onx=>x.Parent.Id).IsIn(新列表{100}))
.List().ToList();

我有一个值要传递到IsIn,为此我必须新建一个列表(
newlist{100}
)。有更干净的方法吗?

您的语法还可以,而且只能做很少的更改或改进。。。这是:

IList<Department> departments;
var parents = new List<int> {167};

// advantage of this "original" QueryOver is, that it can accept
// more parent IDs.. not only one "100" as in our example
// so if we neet children of 100,101,102
// we can get more from this syntax: new List<int> {100, 101,102...};
departments = session
    .QueryOver<Department>()
    .Where(Restrictions.On<Department>( x=> x.Parent.Id)
        .IsIn(parents))
    .List();

// this style is just a bit more straightforward 
// saving few chars of code, using 'WhereRestrictionOn'
departments = session
    .QueryOver<Department>()
    .WhereRestrictionOn(x => x.Parent.Id).IsIn(parents)
    .List();

// in case we do have the only one parent ID to search for
// we do not have to use the IS IN
departments = session
    .QueryOver<Department>()
    .Where(x => x.Parent.Id == 100)
    .List();
IList部门;
var parents=新列表{167};
//这个“原始”查询的优点是,它可以接受
//更多父ID。。不仅仅是我们示例中的一个“100”
//所以如果我们需要100101102的孩子
//我们可以从这个语法中获得更多信息:新列表{100101102…};
部门=会议
.QueryOver()
.Where(Restrictions.On(x=>x.Parent.Id)
.IsIn(父母))
.List();
//这种风格只是简单一点
//使用“WhereRestrictionOn”节省少量代码字符
部门=会议
.QueryOver()
.WhereRestrictionOn(x=>x.Parent.Id).IsIn(parents)
.List();
//如果我们只有一个父ID要搜索
//我们不必使用IS IN
部门=会议
.QueryOver()
.其中(x=>x.Parent.Id==100)
.List();

查看更多信息:

您的语法还可以,只需做一些更改或改进。。。这是:

IList<Department> departments;
var parents = new List<int> {167};

// advantage of this "original" QueryOver is, that it can accept
// more parent IDs.. not only one "100" as in our example
// so if we neet children of 100,101,102
// we can get more from this syntax: new List<int> {100, 101,102...};
departments = session
    .QueryOver<Department>()
    .Where(Restrictions.On<Department>( x=> x.Parent.Id)
        .IsIn(parents))
    .List();

// this style is just a bit more straightforward 
// saving few chars of code, using 'WhereRestrictionOn'
departments = session
    .QueryOver<Department>()
    .WhereRestrictionOn(x => x.Parent.Id).IsIn(parents)
    .List();

// in case we do have the only one parent ID to search for
// we do not have to use the IS IN
departments = session
    .QueryOver<Department>()
    .Where(x => x.Parent.Id == 100)
    .List();
IList部门;
var parents=新列表{167};
//这个“原始”查询的优点是,它可以接受
//更多父ID。。不仅仅是我们示例中的一个“100”
//所以如果我们需要100101102的孩子
//我们可以从这个语法中获得更多信息:新列表{100101102…};
部门=会议
.QueryOver()
.Where(Restrictions.On(x=>x.Parent.Id)
.IsIn(父母))
.List();
//这种风格只是简单一点
//使用“WhereRestrictionOn”节省少量代码字符
部门=会议
.QueryOver()
.WhereRestrictionOn(x=>x.Parent.Id).IsIn(parents)
.List();
//如果我们只有一个父ID要搜索
//我们不必使用IS IN
部门=会议
.QueryOver()
.其中(x=>x.Parent.Id==100)
.List();
请参阅更多: