C# 使用ICriteria在列表中进行NHibernate搜索
我有我的X班: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
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”元素应该在表达式上,对吗?