【问题标题】:NHibernate: a reverse version of in()?NHibernate:in() 的反向版本?
【发布时间】:2009-04-29 11:58:23
【问题描述】:

我正在尝试使用 Nhibernate Criteria 执行我只能描述为 IN() 的反向版本..

而不是说存储在属性中的值是在列表/集合X中

我想说,这个值 X(一个 ID)在列表中,它是对象的一个​​属性。

感谢任何帮助,如果这没有意义,我可以尝试更好地解释。

编辑向人们道歉,据我所知这没有足够的意义......

我的系统中有一个事件项目,它可以有一个适用于它的受众(项目)列表。如果管理员想要删除受众项目,我想检查该项目是否未被任何事件引用。 (AudienceList 存储为受众 ID 的字符串列表)。

我当时的想法是这样的:

var results = SessionInstance.Session.CreateCriteria(typeof(EventItem.Items.EventItem)) .Add(Restrictions.In("AudienceList", myAudience.ID)) .List();

但我需要 AudienceList 和 myAudience.ID 反过来,不是吗?我有观众 ID,但需要检查它是否在其他 ID 列表中。

再次感谢。

编辑 2

EventItem 的定义是它的属性之一是受众 ID 的 DetailCollection,它们作为 ID 的字符串列表保存到数据库中。

【问题讨论】:

  • 我想您是在问如何确定列表中的给定项目是否具有具有给定值的属性 ID,但坦率地说,在我尝试回答之前我可以做更多的澄清...... 更多请详细说明:-)
  • 啊,我没有意识到涉及到 N2。您的关系结构似乎有点奇怪 - 有没有机会看到一些表定义和映射文件摘录?

标签: c# sql nhibernate hql


【解决方案1】:

编辑:废弃了我之前的答案。

嗯,听起来这里没有真正的关系模型,所以事情不会那么漂亮。如果没有外键之类的东西,我不确定 NHibernate 在这种情况下会有多大用处(至少可以生成一个不错的查询)。

如果单个事件记录的所有受众 ID 都存储在单个字段中,则您必须使用 SQL LIKE 或在代码中执行此操作。获取所有 EventItems 并遍历它们,检查它们的 AudienceList 集合以获取您正在寻找的 ID。如果你走这条路,最好创建一个 DTO 以最大限度地减少你移动的数据量。类似的东西

session.CreateQuery("select new AudienceListDTO(e.AudienceList) from EventItems e").List();

假设您只需要通知用户“此受众类型仍在使用中”,而不是指出具体实例。否则,您将不得不添加更多数据。

【讨论】:

  • 嘿,我不太清楚这个术语是什么。一切都由我在 NHibernate (N2 CMS) 之上使用的框架存储。存储在项目表中的对象和详细信息表中的对象的详细信息。在我的情况下,我有一个可以包含受众(儿童、成人等)的活动,我想在尝试删除受众项目时检查活动是否引用了受众。
  • 好的,我很确定我的回答是完全错误的。我会更新它,但首先你能澄清一下 EventItem 的类定义吗?是 AudienceList List 还是 List 或者只是字符串(也许是逗号分隔?)还是 ...?
  • 嘿,谢谢你的回答!我会试一试。应该有不同的关系吗?我宁愿以正确的方式前进。谢谢皮特
  • 听起来您在 EventItems 和 Audiences 之间有一个多对多的关系。也就是说,Eve​​ntItems 可以针对许多不同的受众,而 Audiences 可以针对许多不同的事件。理想情况下,您将拥有 3 个表,1 个用于 EventItems,1 个用于 Audiences,以及 1 个“join”或“link”表将 EventItems 连接到 Audiences。 sdesmedt.wordpress.com/2006/10/21/… 如果您不熟悉该链接,该链接可能有助于在 NHibernate 中实现多对多。
【解决方案2】:

你的意思是这样的吗?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多