MVC LINQ Sort / OrderBy Model

时间:2013-08-16 05:52:27

标签: c# asp.net-mvc linq

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);
    }

2 个答案:

答案 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());