相关疑难解决方法(0)

如何判断IQueryable是否为IOrderedQueryable?

我有一个IQueryable.我没有在它上面调用OrderBy或者用它做任何事情.

如果我做:

// for some reason, isItOrdered is always true
var isItOrdered = myQueryable is IOrderedQueryable<T>
Run Code Online (Sandbox Code Playgroud)

为什么这总是如此?(好像不应该这样.)更重要的是,如何判断IQueryable是否已被订购?(即真正的IOrderedQueryable)

我希望能够做到这样的事情:

if (myQueryable is IOrderedQueryable<T>)
  myQueryable = myQueryable.ThenBy(...);
else
  myQueryable = myQueryable.OrderBy(...);
Run Code Online (Sandbox Code Playgroud)

c# linq

12
推荐指数
2
解决办法
2514
查看次数

如何检查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
查看次数

标签 统计

c# ×2

linq ×2

code-generation ×1

generics ×1

linq-to-entities ×1