フィールド名で注文できる汎用リポジトリに次のメソッドがあります。複数のフィールドで注文する方法を知る必要があります。
public IList<TEntity> FindByExpressionOrdered(Expression<Func<TEntity, bool>> filter,
params Expression<Func<TEntity, object>>[] orderBy)
{
IOrderedQueryable<TEntity> query = SessionScope.Current.Set<TEntity>().Where(filter).OrderBy(orderBy.First());
if (orderBy.Length > 1)
{
for (int i = 1; i < orderBy.Length; i++)
{
query = query.ThenBy(orderBy[i]);
}
}
return query.ToList();
}
上記を次のように呼び出すと、「型 'System.Int64' を型 'System.Object' にキャストできません。LINQ to Entities はエンティティ データ モデルのプリミティブ型のキャストのみをサポートします。」例外。
IList<Product> prods = IoC.Resolve<IRepository<Product>>().FindByExpressionOrdered(p => p.IsActive && p.IsFavorite, p => p.Name, p => p.Id);