将var转换为ClassTracker IQueryable的类类型

时间:2015-07-13 05:14:24

标签: c# asp.net-mvc linq iqueryable

var q = from n in CS.trackers
group n by n.Id into g
select g.OrderByDescending(t => t.DateTime).Take(1);

上面的代码给出了所需的结果,根据日期时间提取Id的最新记录。但是,当我尝试将其转换为class时,可以转换为IQueryAble

List<ClassTracker> o = (from h in q
select new ClassTracker{
Id = 
}
)

当我做Id = q。我没有得到q.Id.我想将它转换为ClassTracker类型,以便我可以使用.AsQueryAble将其转换为IQueryable<ClassTracker>

1 个答案:

答案 0 :(得分:0)

您的第二个查询未收到Id = q,因为您的第一个查询没有退回IEnumerable<T>而是返回IEnumerable<IEnumerable<T>>所以在您的第二个查询中您必须执行SelectMany 1}}像这样: -

List<ClassTracker> o = (from h in q
                        from t in h
                        select new ClassTracker
                                              {
                                                  Id = t.Id,
                                                  //Other properties here
                                              }
                       ).ToList();

但对我来说,你可以在一个查询中完成所有这些: -

IQueryable<ClassTracker> result = (from n in CS.trackers
                     group n by n.Id into g
                     let firstObj = g.OrderByDescending(t => t.DateTime).First()
                     select new ClassTracker
                     {
                         Id = firstObj .Id,
                         //Other properties here
                     }).AsQueryable<ClassTracker>();