在IQueryable上使用带导航属性的MAX和GROUP BY

时间:2013-09-08 14:57:07

标签: entity-framework

我需要在导航属性的EntitySQL查询中使用MAX和GROUP BY。我有以下查询。我需要选择具有最新'CREATED'列的记录,该列存在于表'APPROVALS'的导航属性中。

请帮助查询。

public IQueryable<TravelRequest> GetTravelRequestswithChildrenForGuid(Guid ID)
{
   IQueryable<TravelRequest> v = this.ObjectContext.TravelRequests
   .Include("CarRentals").Include("CarRentals.CarRentalType")
   .Include("Approvals").Include("Approvals.ApprovalType")
   .Include("Accomodations")
   .Include("TravelRequestStatus").Where(t => t.RowGuid.Equals(ID));    

   foreach (TravelRequest t in v)
   {
      t.Flights.Clear();
      foreach (Flight f in GetFlightsForTravelRequest(t.RowGuid))
      {
         t.Flights.Add(f);
      }
   }

   return v;
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,使用from-select-where表示法可能更容易。通过示例查看LINQ 101组: http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

我不知道你的GetFlightsForTravelRequest方法有多复杂,但是你可以通过尝试重用数据层中的代码来轻松杀死很多性能。一个专用查询通常更好。在您的代码中,您将通过使用for循环来失去延迟执行的好处。

我的建议是考虑你想要执行的SQL查询,然后再回到LINQ。