Linq 如何转换IORDerenumerable<;T>;到页面列表<;T>;哪个使用OrderBy,然后使用by?
假设您有一个类Product,其成员声明为嵌套类型ProductFeature:Linq 如何转换IORDerenumerable<;T>;到页面列表<;T>;哪个使用OrderBy,然后使用by?,linq,c#-4.0,sql-order-by,pagedlist,Linq,C# 4.0,Sql Order By,Pagedlist,假设您有一个类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 Feature
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;}
}
在某个地方,您可以通过页面列表加载所有产品:
排序的结果可以被视为IEnumerable
和IORDerenumerable
问题是当我们试图将排序后的转换回页面列表
,或列表
有没有办法将排序的再次转换为列表
?您的第一个问题是Product.ProductName
和Product.id
是ProductFeature
的实例,它没有实现IComparable
,因此您的OrderBy
和ThenBy
在尝试时失败枚举已排序的的结果。这显然是异常消息告诉您的
您的第二个问题是,当您说“将排序的转换回页面列表
,或列表
”时,您没有告诉我们“转换”是什么意思,我想不管你的意思是什么,都可以通过将ProductName
和ProductID
作为实现IComparable
的实例来解决。你的第一个问题是Product.ProductName
和Product.ProductID
都是ProductFeature
的实例,而这些实例并不是实现i可比较
,因此当您尝试枚举排序后的结果时,OrderBy
和ThenBy
会失败。这显然是异常消息告诉您的
您的第二个问题是,当您说“将排序的转换回页面列表
,或列表
”时,您没有告诉我们“转换”是什么意思,我怀疑,不管你的意思是什么,实际上都可以通过将ProductName
和ProductID
作为实现IComparable
的实例来解决!这正是问题所在!我想我将按顺序使用例如:x.ProductName.FeatureName
by@Junior梅:这是一个可以接受的解决方案。一个稍微好一点的替代方法可能是使ProductFeature
实现i可比较
,并让CompareTo
返回CompareTo
对FeatureName
的相应值的结果。很好!这正是问题所在!我想我将按顺序使用例如:x.ProductName.FeatureName
by@Junior梅:这是一个可以接受的解决方案。稍微好一点的替代方法可能是使ProductFeature
实现i可比较
,并让CompareTo
返回CompareTo
对FeatureName
的相应值的结果。
var list = db.GetProductList();//returns PagedList<Product>:
var sorted = model.Products.OrderBy(x => x.ProductName).ThenBy(x=>x.ProductID);
base {System.SystemException}: {"At least one object must implement IComparable."}
Message: "At least one object must implement IComparable."