3

int値を返す必要があるLINQクエリを作成しました。しかし、この値をintに変換できず、例外が発生しました。 タイプ「QuickRoutes.DAL.RouteLinq」のオブジェクトをタイプ「System.IConvertible」にキャストできません。
これは私のLINQです:

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

ここで例外が発生します:

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

どうすればこの問題を解決できますか?

4

5 に答える 5

10

これは、型オブジェクトをres.FirstOrDefault()返すためです。を使用しているため、を使用してフィールドを選択できます。ここで、FieldNameは変換に必要なプロパティであり、おそらくRouteLinqsselect pselect p.FieldNameRouteId

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);
于 2012-07-05T06:34:21.863 に答える
3

最大ルートIDを選択しているように見えるので、次のことを行ってください。

route.Id = aspdb.RouteLinqs.Max(x => x.RouteId);
于 2012-07-05T06:44:07.517 に答える
2

このコードは機能するはずです:

route.Id = Convert.ToInt32((res.FirstOrDefault()).FieldName); 
于 2012-07-05T06:42:13.790 に答える
1

自分がどのようにRouteLinqs定義されているかはわかりませんが、クラスから特定のオブジェクトを選択しようとしている可能性がありますRouteLinqs

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

この場合pはの単一の項目でRouteLinqsあり、p.SomePropertyはint値である必要があります。

于 2012-07-05T06:36:52.723 に答える
0

最初にlinqを作成します:

IQueryable<int> query = (from p in aspdb.RouteLinqs
                           orderby p.RouteId descending
                           select p.Id);

実行するより:

 int result = query.FirstOrDefault();

1つのコマンドで:

int result = (from p in aspdb.RouteLinqs
                           orderby p.RouteId descending
                           select p.Id).FirstOrDefault();
于 2018-04-05T12:26:24.070 に答える