相关疑难解决方法(0)

确定是否已订购IQueryable <T>

有没有办法知道是否IQueryable<T>已订购(使用OrderByOrderbyDescending)?

所以我知道是打电话OrderBy还是ThenBy收集.

IQueryable<Contact> contacts = Database.GetContacts();
Run Code Online (Sandbox Code Playgroud)

我试过了contacts is IOrderedQueryable<Contact>,但它总是如此.

编辑:我刚刚改变了我的例子,前一个并没有真正表明我的观点.假设GetContacts使用Entity Framework并简单地返回表的所有记录.

后来,我应用了几个函数contacts,我不知道这些函数是做什么的.他们可以排序或过滤IQueryable<Contact>.

当我收回集合时,我需要再次对它进行排序.为此,我需要知道是否需要打电话OrderBy,或者ThenBy.因此,如果已经对整个集合进行了排序,我不会重新排序.

c# iqueryable sql-order-by

25
推荐指数
3
解决办法
3929
查看次数

检查Linq IQueryable是否已应用订单

有没有办法找出IQueryable对象是否在其表达式树中应用了OrderBy?

我的方案是网格控件启用了分页,并按列排序.但是默认情况下没有应用排序,所以在这种情况下,Linq to SQL对行计数做了非常大的选择,所以在所有场景中我都需要提供一个order by,但是我应该只应用主键的默认顺序如果没有指定其他订单.

这可能吗?

c# linq expression-trees

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

如何知道OrderBy是否应用于查询?

我需要知道在应用.Skip或.Take之前是否将OrderBy应用于Linq查询.我无法控制收到的查询,如果应用了OrderBy,我需要维护这个,在任何其他情况下我应该OrderBy(t => true).我尝试过以下方法:

    DataContext db;
    var query = db.Orders;

    var wasOrderByApplied = typeof(IOrderedQueryable<Order>).IsAssignableFrom(query.AsQueryable().Expression.Type);
    var wasOrderByApplied2 = query.AsQueryable().Expression.Type == typeof(System.Data.Entity.Core.Objects.ObjectQuery<Order>);
    var wasOrderByApplied3 = typeof(IOrderedQueryable<Order>) == query.AsQueryable().Expression.Type;

    var query2 = db.Orders.OrderBy(o => o.CreationDate);

    var wasOrderByApplied4 = typeof(IOrderedQueryable<Order>).IsAssignableFrom(query2.AsQueryable().Expression.Type);
    var wasOrderByApplied5 = query2.AsQueryable().Expression.Type == typeof(System.Data.Entity.Core.Objects.ObjectQuery<Order>);
    var wasOrderByApplied6 = typeof(IOrderedQueryable<Order>) == query2.AsQueryable().Expression.Type;

    var query3 = db.Orders.OrderBy(o => o.CreationDate).Where(o => o.Id > 4);

    var wasOrderByApplied7 = typeof(IOrderedQueryable<Order>).IsAssignableFrom(query3.AsQueryable().Expression.Type);
    var wasOrderByApplied8 = query3.AsQueryable().Expression.Type == typeof(System.Data.Entity.Core.Objects.ObjectQuery<Order>);
    var wasOrderByApplied9 = typeof(IOrderedQueryable<Order>) == query3.AsQueryable().Expression.Type;
Run Code Online (Sandbox Code Playgroud)

结果在哪里:

wasOrderByApplied = true;
wasOrderByApplied2 = true; …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

3
推荐指数
1
解决办法
375
查看次数