使用Datarow读取LINQ查询的结果

时间:2012-06-30 21:47:49

标签: c# linq linq-to-sql

如何逐行读取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”类型的表达式

2 个答案:

答案 0 :(得分:1)

使用

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

或简单地说:

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

您的Linq查询不会返回DataRow个对象的集合,而是返回从您的数据库表名自动生成的类的对象。

编辑,以解释您问题中的修改:

为什么要访问对象的成员,就像他们仍然是DataRow个对象一样?

您希望像以下一样访问它:

int routeId = row.RouteId;

我真的建议你看一些基本的Linq-to-SQL(或一般的ORM)教程。

答案 1 :(得分:1)

试试这个

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

更新:我想给你更小的语法,希望你不介意

foreach(var routeLinq in aspdb.RouteLinqs.Where(rl => rl.UserId == userId) )
{
    int routeId = routeLinq.RouteId;
}