2017-05-10 120 views
0

我有以下幾點:排序依據與匿名類型

Context context = new Context(); 

var persons = context.Persons.Select(x => new { Name = x.Name }); 

var mapper = OrderMapper.For(persons).Add("name", x => x.Name); 

var result = persons.OrderByWithMapper(mapper); 

其中:

  • 人的類型是IQueryable<anonymous>
  • 映射器的類型爲OrderMapper<anonymous>
  • OrderByWithMapper的是以下幾點:

    public static IQueryable<T> OrderByWithMapper<T>(this IQueryable<T> source, OrderMapper<T> mapper) { 
        // Method code 
    } 
    
  • OrderMapper類如下:

    public class OrderMapper { 
        public static OrderMapper<T> For<T>(IEnumerable<T> collection) { 
        return new OrderMapper<T>(); 
        } 
    } 
    
    public class OrderMapper<T> { 
    } 
    

但我在嘗試創建結果時出現錯誤:

'List<<anonymous type: string Name>>' does not contain a definition for 'OrderByWithMapper' 
and the best extension method overload 'OrderByWithMapper<<anonymous type: 
string Name>>(IQueryable<<anonymous type: string Name>>, OrderMapper<<anonymous type: string Name>>)' 
requires a receiver of type 'IQueryable<<anonymous type: string Name>>' 

我不知道什麼是錯的作爲排序依據方法在EntityFramework中可以匿名使用,例如:

public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector); 

我應該在OrderByWithMapper方法中更改哪些內容以使其適用於匿名類型?

回答

1

OrderByWithMapper<T>(this IQueryable<T> source, OrderMapper<T> mapper)預計的IQueryable<T>OrderMapper<T>

根據錯誤信息您的擴展方法,你正試圖執行它在List<<anonymous type: string Name>>

List<T>沒有實現IQueryable

要麼改變你的擴展方法來接受別的東西(如IEnumerable)或更改您的輸入以提供IQueryable。有關IQueryable的更多信息,請參閱this SO post

+0

當然!我在第一個查詢結束時錯過了ToList(),它將它變成了一個列表 ... –