1

グループ->ユーザー->アカウントの3つのテーブルがあります。グループは複数のユーザーを持つことができ、ユーザーは複数のアカウントを持つことができます。

クエリを使用してグループ内のすべてのアカウントを取得しようとすると

var accounts = accountRepository.FindAll(x => x.User.Group.Id == groupId);

ここで、FindAllは共通リポジトリのメソッドです

/// <summary>
/// Find all entities with filter
/// </summary>
/// <param name="expression">Linq expression</param>
/// <returns>IQueryOver of entity of type TEntity</returns>
public IQueryOver<TEntity> FindAll(Expression<Func<TEntity, bool>> expression)
{
    var query = _session.QueryOver<TEntity>();
    query.Cacheable().CacheMode(CacheMode.Normal);
    return query.Where(expression);
}

グループ内のすべてのアカウントを検索するクエリは、メッセージとともにエラーをスローするため機能しません

could not resolve property: User.Group.Id

このクエリを書くためのより良い方法は何ですか

4

1 に答える 1

4

代わりに Linq を使用して Hibernate を実行します。

public IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> expression)
{
    var query = _session.Query<TEntity>();
    return query.Where(expression);
}

とは異なりQueryOver、Linq プロバイダーはこれらの種類のクエリ (エンティティ階層をトラバースする) をサポートし、SQL 結合に変換します。

于 2012-08-05T13:45:45.110 に答える