相关疑难解决方法(0)

如何将OrderBy表达式数组传递给方法?

我正在尝试增强我的存储库,因此它是负责订购的人.我已经应用了这个问题的答案,就存储库而言,我很确定它已经完成了.

我遇到的问题是我不知道如何将数组传递给存储库中的方法.编译器不停地向我大吼大叫代表们.在上面的链接问题中,作者基本上是在做我想要的,所以它必须是可能的.

这是我的存储库代码:

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争论一样工作,那么奖励积分和爱.

c# linq lambda expression

7
推荐指数
1
解决办法
2104
查看次数

如何检查ObjectQuery <T>表达式树中是否存在OrderBy

我正在使用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)

c# linq generics linq-to-entities code-generation

6
推荐指数
1
解决办法
6580
查看次数