是否可以按列计算的值来订购记录?

时间:2014-08-14 13:37:09

标签: c# entity-framework lambda sql-order-by

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

但现在我想获得一年订购的记录(从列ProjectRegNumber计算)。这是可能的,还是我必须在表格中添加另一个年份值的列?

我在没有排序的情况下获取数据的方法如下所示:

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

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

之类的内容

1 个答案:

答案 0 :(得分:2)

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

您需要先执行它。

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

或者像这样使用DbFunctions.Right

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