0

for each ループは適切に機能し、列を正しく設定しますが、モデルをソートして、新しく設定された値 PickupDistanceSortに基づいて行を昇順に表示することができません。long のデータ型です。モデルがビューに表示されますが、並べ替えられていません。 ビューに送信する前に、モデルをどのように並べ替えますか?PickupDistanceSortPickupDistanceSort

    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 に答える