【问题标题】:reading the result of LINQ query using Datarow使用 Datarow 读取 LINQ 查询的结果
【发布时间】:2012-07-01 06:13:33
【问题描述】:

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

【问题讨论】:

  • 这将逐行读取。 foreach 循环内的代码对结果进行迭代
  • 只需使用var 关键字而不是DataRow。我认为查询不会产生IEnumerable<DataRow>,或者是吗?
  • 什么不起作用?有什么错误信息吗?
  • 当您遇到异常时 - 最好在问题中发布异常消息。
  • 是一个错误:无法将类型“QuickRoutes.DAL.RouteLinq”转换为“System.Data.DataRow”

标签: c# linq linq-to-sql


【解决方案1】:

使用

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

或者简单地说:

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

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

编辑,以说明您问题中的编辑:

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

你想像这样访问它:

int routeId = row.RouteId;

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

【讨论】:

  • 嘿 Philip,如果我使用 var,我的代码中会出现另一个错误:无法将 [] 索引应用于“QuickRoutes.DAL.RouteLinq”类型的表达式
  • 例如这里:var routeId = (int)row["RouteId"];
  • 你在foreach 循环中做什么?你能用里面的代码更新你的问题吗?您似乎正在尝试像使用 DataRow 一样访问某些成员,例如 row[0],这当然不适用于您的 RouteLinq 对象...
  • 直接访问RouteLinq 对象的成员,例如row.RouteId。这就是 ORM 映射器为您所做的事情:它为您的每个数据库表生成类,以便方便地访问它们。
【解决方案2】:

试试这个

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

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

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

【讨论】:

  • 你的答案和我的有什么不同?
  • 如果你读了这些台词,那不是@PhilipDaubmeier 你按时打败了我
  • 哦,我明白了...看起来我们同时回答了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多