Как преобразовать IOrderedEnumerable <T>в PagedList <T>, который использует OrderBy и ThenBy? - PullRequest
0 голосов
/ 22 апреля 2011

Предположим, у вас есть класс Product, члены которого объявлены как вложенный тип ProductFeature:

public class Product {
   public ProductFeature ProductID {get;set;}
   public ProductFeature ProductName {get;set;}
}

public class ProductFeature {
   public int FeatureID {get;set;}
   public string FeatureName {get;set;}
}

, и где-то у вас есть метод для загрузки всех продуктов как PagedList<Product>:

var list = db.GetProductList();//returns PagedList<Product>:

теперь вы хотите отфильтровать и применить некоторые OrderBy и ThenBy:

var sorted = model.Products.OrderBy(x => x.ProductName).ThenBy(x=>x.ProductID);

результат сортировки можно рассматривать как IEnumerable<T>, а также IOrderedEnumerable<T>.

проблема в том, когда мы пытаемся преобразовать sorted обратно в PagedList<Product> или List<Product>.

base {System.SystemException}: {"At least one object must implement IComparable."}
Message: "At least one object must implement IComparable."

. Любой способ преобразовать sorted в List снова?

1 Ответ

3 голосов
/ 22 апреля 2011

Ваша первая проблема заключается в том, что Product.ProductName и Product.ProductID являются экземплярами ProductFeature, который не реализует IComparable, и поэтому ваши OrderBy и ThenBy завершаются неудачно, когда вы пытаетесь перечислить результаты sorted. Это ясно, что сообщение об исключении говорит вам.

Ваша вторая проблема заключается в том, что вы не сказали нам, что вы подразумеваете под «конвертированием», когда говорите «конвертировать sorted обратно в PagedList<Product> или List<Product>». Однако я подозреваю, что все, что вы имеете в виду, будет на самом деле решено путем создания ProductName и ProductID экземпляров чего-то, что реализует IComparable.

...