Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ICriteria在列表中进行NHibernate搜索_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 使用ICriteria在列表中进行NHibernate搜索

C# 使用ICriteria在列表中进行NHibernate搜索,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有我的X班: public class ClassX { public virtual IList<ClassY> ListY { get; set; } ... } 映射优雅 ... References(x => x.Z, "IDZ").Cascade.None(); ... 现在,我想搜索listyz.ID=2中的所有ClassX元素 我如何使用ICriteria做到这一点 谢谢你给我一个标准 Session.CreateCriteria<C

我有我的X班:

public class ClassX
{
   public virtual IList<ClassY> ListY { get; set; }
   ...
}
映射优雅

 ...
 References(x => x.Z, "IDZ").Cascade.None();
 ...
现在,我想搜索listyz.ID=2中的所有ClassX元素

我如何使用ICriteria做到这一点

谢谢你给我一个标准

Session.CreateCriteria<ClassX>()    
   .CreateCriteria("ListY")
   .Add(Expression.Eq("Id", 2)
   .List<ClassX>();
因为我不确定这是否有效:

Session.CreateCriteria<ClassX>()    
       .CreateCriteria("ListY")
       .CreateAlias("Z", "z")
       .Add(Expression.Eq("z.Id", 2)
       .List<ClassX>();
Session.CreateCriteria()
.CreateCriteria(“列表”)
.CreateAlias(“Z”、“Z”)
.Add(表达式.Eq(“z.Id”,2)
.List();
有标准吗

Session.CreateCriteria<ClassX>()    
   .CreateCriteria("ListY")
   .Add(Expression.Eq("Id", 2)
   .List<ClassX>();
因为我不确定这是否有效:

Session.CreateCriteria<ClassX>()    
       .CreateCriteria("ListY")
       .CreateAlias("Z", "z")
       .Add(Expression.Eq("z.Id", 2)
       .List<ClassX>();
Session.CreateCriteria()
.CreateCriteria(“列表”)
.CreateAlias(“Z”、“Z”)
.Add(表达式.Eq(“z.Id”,2)
.List();

我认为这两种方法中的任何一种都应该有效:

Session.CreateCriteria<ClassX>()    
       .CreateAlias("ListY", "y")
       .CreateAlias("y.Z", "z")
       .Add(Expression.Eq("z.Id", 2))
       .List<ClassX>();

Session.CreateCriteria<ClassX>()    
       .CreateAlias("ListY", "y")
       .Add(Expression.Eq("y.Z.Id", 2))
       .List<ClassX>();
Session.CreateCriteria()
.CreateAlias(“ListY”、“y”)
.CreateAlias(“y.Z”,“Z”)
.Add(表达式Eq(“z.Id”,2))
.List();
Session.CreateCriteria()
.CreateAlias(“ListY”、“y”)
.Add(表达式.Eq(“y.Z.Id”,2))
.List();

我认为这两种方法中的任何一种都应该有效:

Session.CreateCriteria<ClassX>()    
       .CreateAlias("ListY", "y")
       .CreateAlias("y.Z", "z")
       .Add(Expression.Eq("z.Id", 2))
       .List<ClassX>();

Session.CreateCriteria<ClassX>()    
       .CreateAlias("ListY", "y")
       .Add(Expression.Eq("y.Z.Id", 2))
       .List<ClassX>();
Session.CreateCriteria()
.CreateAlias(“ListY”、“y”)
.CreateAlias(“y.Z”,“Z”)
.Add(表达式Eq(“z.Id”,2))
.List();
Session.CreateCriteria()
.CreateAlias(“ListY”、“y”)
.Add(表达式.Eq(“y.Z.Id”,2))
.List();

如果我们将此条件搜索分解为多个步骤,可能会有助于您理解。据我所知,这里有两种解决方案。第一种方法是为其他两个类创建ICriteria对象。它如下所示:

ICriteria classXCriteria = Session.CreateCriteria<Class>();
ICriteria classYCriteria = classXCriteria.CreateCriteria<classY>();
ICriteria classZCriteria = classYCriteria.CreateCriteria<classZ>();

classZCriteria.Add(Expression.Eq("Z", [id to search on goes here]));

IList<ClassX> results = classXCriteria.List<ClassX>();
ICriteria classXCriteria=Session.CreateCriteria();
ICriteria classYCriteria=classXCriteria.CreateCriteria();
ICriteria classZCriteria=classYCriteria.CreateCriteria();
Add(Expression.Eq(“Z”,[id在这里搜索]);
IList results=classXCriteria.List();
使用别名的第二个选项:

ICriteria classXCriteria = Session.CreateCriteria<ClassX>();
classXCriteria.CreateAlias("ListY", "classY");
classXCriteria.CreateAlias("classY.Z", "classZ");
classXCriteria.Add(Expression.Eq("classZ.Id", [id to search on goes here]));

IList<ClassX> results = classXCriteria.List<ClassX>();
ICriteria classXCriteria=Session.CreateCriteria();
CreateAlias(“ListY”、“classY”);
CreateAlias(“classY.Z”、“classZ”);
Add(Expression.Eq(“classZ.Id”,[Id在这里搜索]);
IList results=classXCriteria.List();

如果我们将此条件搜索分解为多个步骤,可能会有助于您理解。据我所知,这里有两种解决方案。第一种方法是为其他两个类创建ICriteria对象。它如下所示:

ICriteria classXCriteria = Session.CreateCriteria<Class>();
ICriteria classYCriteria = classXCriteria.CreateCriteria<classY>();
ICriteria classZCriteria = classYCriteria.CreateCriteria<classZ>();

classZCriteria.Add(Expression.Eq("Z", [id to search on goes here]));

IList<ClassX> results = classXCriteria.List<ClassX>();
ICriteria classXCriteria=Session.CreateCriteria();
ICriteria classYCriteria=classXCriteria.CreateCriteria();
ICriteria classZCriteria=classYCriteria.CreateCriteria();
Add(Expression.Eq(“Z”,[id在这里搜索]);
IList results=classXCriteria.List();
使用别名的第二个选项:

ICriteria classXCriteria = Session.CreateCriteria<ClassX>();
classXCriteria.CreateAlias("ListY", "classY");
classXCriteria.CreateAlias("classY.Z", "classZ");
classXCriteria.Add(Expression.Eq("classZ.Id", [id to search on goes here]));

IList<ClassX> results = classXCriteria.List<ClassX>();
ICriteria classXCriteria=Session.CreateCriteria();
CreateAlias(“ListY”、“classY”);
CreateAlias(“classY.Z”、“classZ”);
Add(Expression.Eq(“classZ.Id”,[Id在这里搜索]);
IList results=classXCriteria.List();
但是我的“ListY”里面有“ClassZ”元素……那些“Z”元素应该在表达式上,对吗?但是我的“ListY”里面有“ClassZ”元素……那些“Z”元素应该在表达式上,对吗?