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