0

伙计们,

我遇到了这个问题,我几乎在所有地方都进行了搜索(也许我不知道正确的关键字。)我需要你的帮助!

关系很简单,我有两个 Activerecord 域:Team 和 User,它们之间有 HasAndBelongsToMany 关系。

我现在的要求是查询 Team.Id = 4 的用户数并查询 Team.Id = 4 的用户列表。所以我正在做类似的事情:

DetachedCriteria c = DetachedCriteria.For<Models.User>()
            .AddOrder(Order.Desc("RegisterTime"))
            .CreateAlias("Teams", "teams")
            .Add(Expression.Eq("teams.Id", 4));

int count = ActiveRecordMediator<Models.User>.Count(c);
IList<Models.User> users = Models.User.FindAll(c); 

计数被正确检索,但对于列表查询,我得到异常:

Exception Details: System.InvalidCastException: At least one element in the source array could not be cast down to the destination array type.

如果我单独使用它们。他们都是正确的。但是当我一个接一个地使用它们时。例外来了。这就像 DetachedCriteria 不应在两个查询中紧密使用。这是为什么?

正确的方法是什么?

需要你的帮助!

4

2 回答 2

1

我找到了一种方法来做到这一点,虽然我仍然不清楚根本原因,但编写如下代码使其正确并且看起来不错:

DetachedCriteria c = DetachedCriteria.For<Models.User>().AddOrder(Order.Desc("RegisterTime")).CreateAlias("Teams", "teams").Add(Expression.Eq("teams.Id", 4));
int count = ActiveRecordMediator<Models.User>.Count(NHibernate.CriteriaTransformer.TransformToRowCount(c));
IList<Models.User> users = Models.User.FindAll(c);

我回答了我自己的问题只是为了把这种方法放在这里,我不确定这是否是最好的答案。

我渴望听到更多关于这方面的信息!

于 2011-07-19T03:31:34.600 回答
0

我的赌注是ActiveRecordMediator<Models.User>.Count(c);用投影改变标准,这将导致第二次调用出现异常。您可以通过克隆每个查询的条件来解决此问题。

var clonedcrit = NHibernate.CriteriaTransformer.Clone(c)
于 2011-07-18T16:27:37.340 回答