迭代通过列表
我有一个实体框架请求检索许多不同的信息,使用几个内部联接,所以我使用动态列表作为返回类型,但我似乎无法找到一种方法来使其工作当迭代它时。迭代通过列表<dynamic>
我提出的要求,有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的转换异常。我找不到解决这个问题的方法。我最初使用它是因为我返回的结果是匿名类型的,所以这就是我发现使返回成为可能的原因。
谢谢
正如我在评论说,我应该这样做
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);
}
是的,我要做到这一点,似乎更简单,合理,谢谢:) –
只是做;
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}
这引发了一个异常“对象不包含rId的定义” –
@Reedwanul你的最后一句是不正确的,这不是一个动态的类型,它是一个匿名对象。这两件事情非常不同。 – DavidG
创建动态的对象。如果你只打算重复在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);
}
首先,你为什么要将它转换为“动态”列表?其次,嵌套列表意味着数据是不正确的列表列表。你究竟想要做什么? – DavidG
我会避免使用'动态',除非你真的知道你在做什么。你能至少使用'object'吗? – user2023861
我强烈建议创建一个类型来处理结果。我不知道你为什么有两个foreach。查询的结果应该是这样的'变种dynamicList =新名单 { 新{RID = 1,KID = 1}, 新{RID = 2,孩子= 2}, 新{RID = 3, kId = 3}, new {rId = 4,kId = 4} };' –