2012-07-05 187 views
1

我寫了一個應該返回int值的LINQ查詢。但我無法將此值轉換爲int併發生異常: 無法投射「QuickRoutes.DAL.RouteLinq」類型的對象以鍵入「System.IConvertible」。
這是我的LINQ:將LINQ查詢結果轉換爲int

var res = (from p in aspdb.RouteLinqs 
         orderby p.RouteId descending 
         select p).Take(1); 

和異常occures這裏:

route.Id =Convert.ToInt32(res.FirstOrDefault()); 

我怎樣才能解決這個問題?

+0

你選擇一個routeLinq對象......而不是選擇對應於您感興趣的int值的屬性 – NoviceProgrammer

回答

9

那是因爲res.FirstOrDefault()返回RouteLinqs類型的對象,因爲您正在使用select p,您可以選擇使用select p.FieldName,其中字段名是你需要轉換的財產,這可能是RouteId

您可能要到現場查詢linq查詢中的特定字段。

var res = (from p in aspdb.RouteLinqs 
         orderby p.RouteId descending 
         select p.RouteId).Take(1); //p.RouteID or any field you want. 

或與當前的查詢,你可以這樣做:

route.Id =Convert.ToInt32(res.FirstOrDefault().RouteID); 
1

不知道你的信息,但RouteLinqs如何定義,但也許你正在尋找從類RouteLinqs選擇一個特定的對象。

var res = (from p in aspdb.RouteLinqs 
        orderby p.RouteId descending 
        select p.SomeProperty).Take(1); 

在這種情況下pRouteLinqs和p.SomeProperty一個單一的項目應該是你的int值。

2

此代碼應工作:

route.Id = Convert.ToInt32((res.FirstOrDefault()).FieldName); 
3

看起來就像你選擇最大的路由ID,那麼,爲什麼不只是做:

route.Id = aspdb.RouteLinqs.Max(x => x.RouteId);