for each循环正常设置PickupDistanceSort
列,但是我无法对模型进行排序,以便我可以根据新设置的PickupDistanceSort
按升序显示行值。 PickupDistanceSort
是long的数据类型。模型显示在视图中,它只是没有排序。 如何在模型发送到视图之前对其进行排序?
public ActionResult JobsDistanceSorted()
{
var model = from j in db.Jobs select j;
foreach (var item in model)
{
item.PickupDistanceSort = ICN.CustomMethods.
GetDistance(34.180046081543, -118.309028625488,
item.PickupLatitude, item.PickupLongitude);
}
model = model.OrderBy(s => s.PickupDistanceSort);
return View("JobHeadings", model);
}
答案 0 :(得分:4)
您必须将其转换为在本地存储项目的List,然后您可以在本地列表上调用OrderBy。在IQueryable上调用OrderBy将导致新的数据库查询,其中不存储值。
public ActionResult JobsDistanceSorted()
{
var model = db.Jobs.ToList();
foreach (var item in model)
{
item.PickupDistanceSort = ICN.CustomMethods.
GetDistance(34.180046081543, -118.309028625488,
item.PickupLatitude, item.PickupLongitude);
}
return View("JobHeadings", model.OrderBy(s => s.PickupDistanceSort));
}
答案 1 :(得分:0)
如果PickupDistanceSort
不是.Net类型,则需要为您的类型实现IEqualityComparer
并使用OrderBy
这样的方式(PickupDistanceComparer是自定义比较器的名称):
model = mode.OrderBy(s => s.PicupDistanceSort, new PickupDistanceComparer());