2015-07-13 59 views
0
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將var轉換爲ClassTracker的類類型IQueryable

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

當我做Id = q。我沒有得到q.Id.我想將其轉換爲一個類型ClassTracker的,這樣我可以用.AsQueryAble將其轉換爲IQueryable<ClassTracker>

回答

0

你是不是在你的第二個查詢得到Id = q因爲你的第一個查詢不returing的IEnumerable<T>代替它返回IEnumerable<IEnumerable<T>>如此在你的第二個查詢,你將不得不這樣做SelectMany這樣的: -

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>(); 
+0

感謝回覆rahul。我收到如下錯誤。 base = {「方法'First'只能用作最終的查詢操作,請考慮在此實例中使用方法'FirstOrDefault'。」} – user2998990

+0

錯誤已解決。但我沒有得到最新的紀錄。我的意思是數據庫中有兩次不同日期的記錄。兩條記錄都出現了。我只想要最新日期 – user2998990

+0

的數據(單排)錯誤得到解決。但我沒有得到最新的紀錄。我的意思是數據庫中有兩次不同日期的記錄。兩條記錄都出現了。我只想要最新日期的數據(單行) – user2998990