我有一个实体框架请求,使用几个内部联接来检索许多不同的信息,所以我使用动态List作为返回类型,但我似乎无法找到一种方法,使其在迭代时工作。
我提出了4个表的请求,但我会采用另一个例子来简化,比如我有表Room
和Kitchen
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上获得转换异常。我找不到任何方法来解决这个问题。我最初使用它是因为我返回的结果是匿名类型的,所以我发现这可以使返回成为可能。
由于
答案 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}