次の場合QueryOver
:
UserProfile userProfileAlias = null;
Pegfile pegfileAlias = null;
var q = Session.QueryOver(() => pegfileAlias)
.JoinAlias(() => pegfileAlias.UserProfile, () => userProfileAlias);
スワップすることで、次のステートメントを動的にしたい
q = q.OrderBy(() => userProfileAlias.Forename).Asc;
(OrderBy(Expression<Func<object>>
または(OrderBy(Expression<Func<T, object>>)
)
と
q = q.OrderBy(GetMemberExpression(userProfileAlias, "Forename")).Asc;
別の投稿から借りて取得しました
private Expression<Func<object>> GetMemberExpression(UserProfile instance, string propertyName)
{
var arg = Expression.Constant(instance, typeof(UserProfile));
var body = Expression.Convert(Expression.PropertyOrField(arg, propertyName), typeof(UserProfile));
var lambda = Expression.Lambda<Func<object>>(body);
return lambda;
}
しかし、これは機能していません、私は得ます:
System.InvalidOperationException
No coercion operator is defined between types 'System.String' and 'Pegfect.Domain.PegDudes.UserProfile'.
私はおそらく次のsigに一致する必要があると思います:
OrderBy(Expression<Func<UserProfile,object>>)
GetMemberExpression
それを返すように変える方法は?