0

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

2 回答 2

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));
}
于 2013-08-16T07:10:49.067 回答
0

如果PickupDistanceSort不是 .Net 类型,您需要IEqualityComparer为您的类型实现一个并OrderBy像这样使用(PickupDistanceComparer 是您的自定义比较器的名称):

model = mode.OrderBy(s => s.PicupDistanceSort, new PickupDistanceComparer());
于 2013-08-16T06:17:52.137 回答