迭代List <dynamic>

时间:2017-08-16 14:32:50

标签: c# asp.net-mvc entity-framework

我有一个实体框架请求,使用几个内部联接来检索许多不同的信息,所以我使用动态List作为返回类型,但我似乎无法找到一种方法,使其在迭代时工作。

我提出了4个表的请求,但我会采用另一个例子来简化,比如我有表RoomKitchen

var result = from r in Room
             join k in Kitchen on r.idKitchen=k.id
             where (r.id == myIDPassedAsParameter)
             select new { rId = r.id, kId = k.id}
             .ToList<dynamic>();

现在尝试访问它时,我会执行以下操作:

foreach (var r in result)
{
    foreach (var item in r)
    {
        Console.WriteLine(item.rId + " " + item.kId);
    }

}

我继续在第二个foreach上获得转换异常。我找不到任何方法来解决这个问题。我最初使用它是因为我返回的结果是匿名类型的,所以我发现这可以使返回成为可能。

由于

3 个答案:

答案 0 :(得分:5)

正如我在评论中所述,我这样做

private class RoomKitchenPair
    {
        public int RoomId { get; set; }

        public int KitchenId { get; set; }
    }

var result = (from r in Room
         join k in Kitchen on r.IdKitchen equals k.Id
         where (r.Id == myIDPassedAsParameter)
         select new RoomKitchenPair { RoomId= r.Id, KitchenId = k.Id})

foreach (var r in result)
{
    Console.WriteLine(r.RoomId + " - " + r.KitchenId );
}

答案 1 :(得分:1)

如果您只想在foreach循环中迭代结果,则无论如何都不需要ToList,因为结果本身是IEnumerable。 此外,它是IEnumerable<T>,其中T是您的匿名类型 - 因此您只需要一个foreach循环:

var result = from r in Room
             join k in Kitchen on r.idKitchen=k.id
             where (r.id == myIDPassedAsParameter)
             select new { rId = r.id, kId = k.id}

foreach (var item in result)
{
    Console.WriteLine("{0} {1}", item.rId, item.kId);
}

答案 2 :(得分:-1)

只是做;

var result = (from r in Room
             join k in Kitchen on r.idKitchen=k.id
             where (r.id == myIDPassedAsParameter)
             select new { rId = r.id, kId = k.id})
             .ToList<dynamic>();

foreach (var r in result)
    {
          Console.WriteLine(r.rId + " " + r.kId);

    }

您已经通过

创建了动态对象
select new { rId = r.id, kId = k.id}