是否可以按从列中计算的值对记录进行排序?

本文关键字:记录 排序 计算 是否 | 更新日期: 2023-09-27 18:17:55

我有一个表Project,列ProjectRegNumber。从这个列中可以得到年份(例如,如果列值为855589/14,年份是2014(20 +最后两个数字)。我有方法GetYearFromRcn这个(参数reg)。数字,返回值(年)。我在GridView中显示所有项目,其中一列是年份-这工作得很好。

但是现在我想获得按年份排序的记录(从列ProjectRegNumber计算)。这是可能的,或者我必须添加另一个列与年值到我的表?

不排序获取数据的方法如下:

public static List<Project> GetProjects()
{
 using (var ctx = new NSMASEntities())
 {
  return ctx.Project
   .ToList();
 }
}

这里我想添加.OrderBy(project => GetYearFromRcn(project.ProjectRegNumber))

是否可以按从列中计算的值对记录进行排序?

Linq将无法将GetYearFromRcn方法转换为Linq表达式。

你需要先执行它。

return ctx.Project
          .ToList()
          .OrderBy(p => GetYearFromRcn(p.ProjectRegNumber))
          .ToList();

或者使用DbFunctions。右像这样

return ctx.Project
          .OrderBy(p => "20" + DbFunctions.Right("00" + p.ProjectRegNumber, 2))
          .ToList();