gpt4 book ai didi

c# - NHibernate:标准/子标准投影

转载 作者:太空狗 更新时间:2023-10-30 00:42:44 28 4
gpt4 key购买 nike

我有一个类 Mod,它有一个成员:

ICollection<Event> EventList

类 Event 有一个成员:

public virtual EventType Type { get; set; }

类 EvenType 有成员:

   public virtual int Id

我想使用 NHibernate Criteria 获取 Mod 中所有事件的列表,这些事件的 ID 为 1 或 2。我这样做了:

var subCriteria = DetachedCriteria.For<Mod>()
.Add(Restrictions.In("Event.Type", new int[] {1, 2 })
);
criteria.Add(Subqueries.Exists(subCriteria));

但我收到一个运行时错误提示不能在没有投影的情况下对条件使用子查询。

很好,但我不知道要为投影放什么。我可以找到如何进行投影的示例,但没有任何内容能真正解释其目的。我尝试了各种方法,但都导致了运行时错误:

消息:值不能为空。参数名称:键来源:mscorlib帮助链接:参数名称: key

我需要使用子查询,因为当它起作用时我会添加更多内容。

您能建议为 Projection 做什么吗?

最佳答案

如此处记录:16.4. Associations可以这样做:

IQueryOver<Mod, Event> query = session
.QueryOver<Mod>()
.JoinQueryOver<Event>(mod => mod.EventList)
.WhereRestrictionOn(evnt => evnt.Type.Id).IsIn(new object[] { 1, 2});

var result = query.List<Mod>();

编辑:纯 Criteria API:

var criteria = session.CreateCriteria<Mod>();
var sub = criteria.CreateCriteria("EventList", JoinType.LeftOuterJoin);
sub.Add(new InExpression("Type", new object[] { 1, 2 }));

var result = criteria.List<Mod>();

使用分离标准。在这种情况下,EventType 必须具有属性 ModId 或引用 Mod 实例。在子查询中,我们必须返回有效 Mod.ID 的列表

var sub = DetachedCriteria
.For<Event>()
.Add(Restrictions.In("Type", new int[] {1, 2 })) // WHERE
.SetProjection(Projections.Property("ModId")); // Mod.ID the SELECT clause

var criteria = session.CreateCriteria<Mod>();
criteria.Add(Subqueries.PropertyIn("ID", sub)); // Mod.ID in (select
var result = criteria.List<Mod>();

关于c# - NHibernate:标准/子标准投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973942/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com