复杂的OrderBy:语句体无法转换为表达式树

时间:2016-02-20 03:39:12

标签: c# entity-framework linq entity-framework-6 sql-order-by

基本上我正在尝试从我的数据库中检索对象列表(使用Entity Framework 6),但是我希望以某种方式对项目进行排序。

我尝试了以下内容:

context.Coordinates.OrderBy(x =>
    {
        double latDif = Math.Abs(centerLat - x.Longtitude);
        double lngDif = Math.Abs(centerLng - x.Latitude);

        double dif = latDif + lngDif;
        return dif;
    });

但是,编译器显示以下错误:

  

带有语句体的lambda表达式无法转换为   表达树

我已经查看了这一点,并了解在linq-to-sql中调用orderby时我不能使用语句体(大括号)。

但是,如何在不加载所有条目的情况下执行上述复杂订单?

顺便说一下,如果你想知道我正试图通过最接近中心坐标(centerLat和centerLng)的物品订购物品。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

context.Coordinates.OrderBy(x=> Math.Abs(centerLat - x.Longtitude) + Math.Abs(centerLng - x.Latitude));

如果您希望根据多个列进行订购,请使用

.OrderBy(x=> new {

    // fields or props or columns
 })