私はこのような問題を抱えているようですが、実際にはSOとGoogleのソリューションのどれも私のために働いていません。QueryOverとの独立した呼び出しとページング
は(私に非常に似)このような状況を考えてみましょう:
public class User
{
public int Id;
public string Name;
//30 other fields;
public IList<Role> Roles;
}
public class Role
{
public int RoleNumber;
public int UserId;
}
1ユーザーは、0-多くの役割を持つことができます。
ユーザーのグリッドビューのリストに、そのフィールドと追加の「役割」列を表示して、すべてのRoleNumbers(リピーターを使用)を表示したいとします。そのためには、役割を持つユーザーのリストを区別する必要があります。
QueryOverでこのようなクエリを作成することはできますか?インターネットからのすべてのソリューションは、Idとサブクエリを作成して、サブクエリにあるIdを返す2番目のクエリを作成する必要があると言います。それは動作し、私には別のリストを返すが、ロールはないので、NHは各ユーザに欠けている情報を得るために追加の選択肢を生成する。
マイクエリ:私は2番目を追加した場合の役割
せずにリストをdistincted
Role roles = null;
User users = null;
IQueryOver<User,User> userQuery = ...
IQueryOver<User,User> distQuery = ...
distQuery.JoinAlias(f=> f.Roles,() => Roles, JoinType.LeftOuterJoin)
.Select(Projections.Distinct(Projections.Id()));
userQuery.WithSubquery.WhereProperty(g => g.Id).In<User>((QueryOver<User>) distQuery) //and other joins, wheres etc.
returnesそれが役割でリストを返します。役割に参加し、私は第二の役割に参加追加する場合
を複製し、使用
TransformUsing(new DistinctRootEntityResultTransformer())
ユーザーとは別のリストを返します。r olesが、ページングは機能せず、RowCount()は不正な番号を返します。
私は何ができますか?
私は欲しかったのは、選択肢の数を減らし、場合によっては> 200個の選択を生成していた(ほとんどがnullを返す)ことでした。 。 – Kostrzak