MVC LINQ按模型排序

本文关键字:排序 模型 LINQ MVC | 更新日期: 2023-09-27 18:27:49

for each循环可以正确设置PickupDistanceSort列,但我无法让模型进行排序,以便根据新设置的PickupDistanceSort值按升序显示行。CCD_ 3是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);
    }

MVC LINQ按模型排序

您必须将其转换为本地存储项目的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));
}

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

model = mode.OrderBy(s => s.PicupDistanceSort, new PickupDistanceComparer());