我有两个模型:
public class CarRent
{
public string CarName { get; set; }
public string SystemId { get; set; }
public DateTime RentEndDate { get; set; }
}
public class CarPurchase
{
public string CarName { get; set; }
public string SystemId { get; set; }
public decimal Mileage { get; set; }
}
我需要将它们合并为一个列表,按CarName进行分组,然后在每个组内,我需要首先按SystemId对型号进行排序,但如果模型具有相同的SystemId,则需要按RentEndDate对CarRent模型进行排序,并按Mileage对CarPurchase进行排序。
我尝试过定义一个接口:
public interface ICarPurchaseOrdered
{
string CarName { get; }
string SystemId { get; }
string Order { get; }
}
我让我的模型实现了它,Order
属性只返回第二个排序条件的字符串表示形式,然后我定义了一个视图模型:
public class GroupedCardList
{
public string CarName { get; set; }
public IEnumerable<ICarPurchaseOrdered> Cars { get; set; }
}
然后我有一个分组器,只是对我的模型进行分组:
public class CarGrouper
{
IEnumerable<GroupedCardList> Group(IEnumerable<ICarPurchaseOrdered> cars)
{
return cars.GroupBy(c => c.CarName)
.OrderBy(c => c.Key)
.Select(c => new GroupedCardList()
{
CarName = c.Key,
Cars = c.OrderBy(n => n.SystemId)
.ThenBy(n => n.Order)
});
}
}
但是它的运行不正确,因为它对字符串进行排序,我先得到了里程为1200
的汽车购买记录,然后才是里程为90
的汽车。
我知道这个例子有点牵强,但它很好地代表了我目前遇到的问题。请给我一些建议。
ThenBy
吗?但如果它不是整数,使用Convert.ToInt32
或Convert.ToDouble
。 - Grant H.CarRent { Id=5, RentEndDate=05/05/2014 }
和CarPurchase { Id=5, Mileage=100000 }
? - vgru