我正在尝试使用EF6执行以下查询:
var contracts = ctx.Orders
.Include(c => c.OrderLines)
.Where(c => c.IdCompany == idCompany)
.OrderBy(x => new {OrderByColumn}) //OrderByColumn is a string
.ToPagedQuery(pageSize, pageNumber) //ordinary Skip and Take
.ToList();
但它会抛出此SqlException:
A column has been specified more than once in the order by list. Columns in the order by list must be unique.
当我在OrderBy子句中使用Include和匿名类型时,会出现问题。
我知道匿名类型不适用于投影上的Include(Projecting to an Anonymous Type),但我不知道这是否适用于OrderBy子句。
有没有办法做到这一点?如果没有,为什么它不起作用?
由于
答案 0 :(得分:0)
我认为您的部分订单应该是这样的:
.OrderBy(x => x.OrderByColumn)
答案 1 :(得分:0)
我找到了一个接收字符串而不是匿名类型(dynamic-linq-orderby-using-string-names)的扩展方法。问题解决了。
答案 2 :(得分:0)
你混合投影和排序吗? Orderby并不期望匿名类型。选择可以使用匿名类型
// context DbSet.....
.Where(w=>w.Id == "return true") // an expression that returns true
.OrderBy(o=>o.Name) // expression that returns a prop Name not anonymous type
.Select(s=> new {s.Id, s.Name}); // New type with 2 fields
Orderby签名
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector)
选择签名
public static IQueryable<TResult> Select<TSource,TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector)