我正在尝试增强我的存储库,因此它是负责订购的人.我已经应用了这个问题的答案,就存储库而言,我很确定它已经完成了.
我遇到的问题是我不知道如何将数组传递给存储库中的方法.编译器不停地向我大吼大叫代表们.在上面的链接问题中,作者基本上是在做我想要的,所以它必须是可能的.
这是我的存储库代码:
public virtual IList<TEntity> SelectOrderedList(
Expression<Func<TEntity, bool>>[] Orderers,
bool Ascending = true) {
IOrderedQueryable<TEntity> TemporaryQueryable = null;
foreach (Expression<Func<TEntity, bool>> Orderer in Orderers) {
if (TemporaryQueryable == null) {
TemporaryQueryable = (Ascending ? this.ObjectSet.OrderBy(Orderer) : this.ObjectSet.OrderByDescending(Orderer));
} else {
TemporaryQueryable = (Ascending ? TemporaryQueryable.ThenBy(Orderer) : TemporaryQueryable.ThenByDescending(Orderer));
};
};
return TemporaryQueryable.ToList();
}
Run Code Online (Sandbox Code Playgroud)
另外,我并不是100%肯定我应该使用Expression<Func<TEntity, bool>>.出于某种原因,我有一种感觉,它应该是Expression<Func<TEntity, int>>,但我不太确定.
无论如何,如果有人能告诉我如何实际打电话,我真的很感激.如果你可以让它像params争论一样工作,那么奖励积分和爱.
我正在使用T4为LINQ to Entities实体生成存储库.
存储库包含(除其他外)适合于分页的List方法.支持和不支持的方法的文档没有提到它,但是你不能Skip在无序上"调用" IQueryable.它会引发以下异常:
System.NotSupportedException:方法'Skip'仅支持LINQ to Entities中的排序输入.必须在方法'Skip'之前调用'OrderBy'方法.
我通过允许通过部分方法定义默认排序来解决它.但是我在检查表达式树是否确实包含一个问题时遇到了问题OrderBy.
我已将问题减少到尽可能少的代码:
public partial class Repository
{
partial void ProvideDefaultSorting(ref IQueryable<Category> currentQuery);
public IQueryable<Category> List(int startIndex, int count)
{
IQueryable<Category> query = List();
ProvideDefaultSorting(ref query);
if (!IsSorted(query))
{
query = query.OrderBy(c => c.CategoryID);
}
return query.Skip(startIndex).Take(count);
}
public IQueryable<Category> List(string sortExpression, int startIndex, int count)
{
return List(sortExpression).Skip(startIndex).Take(count);
}
public IQueryable<Category> List(string sortExpression)
{
return AddSortingToTheExpressionTree(List(), sortExpression);
}
public IQueryable<Category> List()
{
NorthwindEntities ent = …Run Code Online (Sandbox Code Playgroud)