复杂排序依据:语句正文无法转换为表达式树

本文关键字:转换 表达式 正文 排序 语句 复杂 | 更新日期: 2023-09-27 18:35:31

基本上,我正在尝试从数据库中检索对象列表(使用实体框架 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时我不能使用语句正文(大括号)。

但是,我如何在不加载所有条目的情况下执行像上面这样的复杂排序呢?

顺便说一句,如果您想知道我正在尝试按最接近中心坐标(中心拉特和中心Lng)的项目对项目进行排序。

复杂排序依据:语句正文无法转换为表达式树

你可以

这样做。

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

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

.OrderBy(x=> new {
    // fields or props or columns
 })