2

如何逐行读取 LINQ 查询的结果。(可能)?我想实现这个但不可能:

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 回答