EF6:使用匿名类型+包含顺序

时间:2015-04-17 20:53:02

标签: c# entity-framework

我正在尝试使用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子句。

有没有办法做到这一点?如果没有,为什么它不起作用?

由于

3 个答案:

答案 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)