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

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

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

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

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

我的系统中有一个事件项,可以有一个适用于它的受众(项目)列表。如果管理员想要删除Audience项目,我想检查该项目是否未被任何事件引用。 (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的定义是其中一个属性是Audience ID的DetailCollection,它们作为ID的字符串列表保存到DB中。

有帮助吗?

解决方案

编辑:废弃我之前的回答。

嗯,这听起来好像没有一个真正的关系模型,所以事情不会那么漂亮。没有外键等,我不确定NHibernate在这种情况下会有多大用处(至少可以产生一个很好的查询)。

如果单个事件记录的所有Audience ID都存储在单个字段中,则您必须使用SQL LIKE或在代码中执行此操作。获取所有EventItem并迭代它们,检查其AudienceList集合中是否有您要查找的ID。如果你走这条路线,最好创建一个DTO来最小化你移动的数据量。像

这样的东西
session.CreateQuery("select new AudienceListDTO(e.AudienceList) from EventItems e").List();

假设您只需要通知用户“此受众群体类型仍在使用中”,并没有指出具体的例子。否则你将不得不添加更多数据。

其他提示

你的意思是这样吗?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top