在应用.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;
结果如下:
wasOrderByApplied = true;
wasOrderByApplied2 = true;
wasOrderByApplied3 = false;
wasOrderByApplied4 = true;
wasOrderByApplied5 = false;
wasOrderByApplied6 = true;
根据最近的结果显示,每个查询所提出的第三个问题是正确的,但我执行了第三个查询(query3),结果如下:
wasOrderByApplied7 = false;
wasOrderByApplied8 = false;
wasOrderByApplied9 = false;
当我在OrderBy之后添加一个Where语句时,查询结果应该是true,但实际上是false。请问有更好的方法来确定是否对查询应用了OrderBy吗?