2

LINQ クエリの結果を 1 行ずつ読み取るにはどうすればよいですか (可能ですか)? これを実装したいのですが、できません:

aspnetdbDataContext aspdb = new aspnetdbDataContext();
var res = from r in aspdb.RouteLinqs
          where r.UserId == userId
          select r;

foreach (DataRow row in res)
{
    // ...

例外がスローされます。

タイプ 'QuickRoutes.DAL.RouteLinq' を 'System.Data.DataRow' に変換できません

編集:

私が持っているforeachブロックで:

foreach (var row in res)
{
    var routeId = (int)row["RouteId"];
    var route = new Route(routeId)
                {
                    Name = (string)row["SourceName"],
                    Time = row["CreationTime"] is DBNull ? new DateTime() :
                                    Convert.ToDateTime(row["CreationTime"])
                };

    route.TrackPoints = GetTrackPointsForRoute(routeId);
    result.Add(route);
}

var を使用すると、いくつかの行でこのエラーが発生します。

タイプ 'QuickRoutes.DAL.RouteLinq' の式に [] を使用したインデックス付けを適用することはできません

4

2 に答える 2

1

使用する

foreach (RouteLinq row in res)
{
    // ...

または単に:

foreach (var row in res)
{
    // ...

Linq クエリはDataRowオブジェクトのコレクションを返すのではなく、データベース テーブル名から自動生成されたクラスのオブジェクトを返します。

編集、質問の編集を説明するために:

オブジェクトがまだオブジェクトであるかのように、オブジェクトのメンバーにアクセスしているのはなぜDataRowですか?

次のようにアクセスします。

int routeId = row.RouteId;

いくつかの基本的な Linq-to-SQL (または一般的な ORM) チュートリアルを参照することを強くお勧めします。

于 2012-06-30T21:52:43.050 に答える
1

これを試して

foreach (var row in res)
{.....

更新:より小さな構文を提供したいと思いますが、気にしないでください

foreach(var routeLinq in aspdb.RouteLinqs.Where(rl => rl.UserId == userId) )
{
    int routeId = routeLinq.RouteId;
}
于 2012-06-30T21:53:23.010 に答える