循环ienumerable并获取值
本文关键字:获取 ienumerable 循环 | 更新日期: 2023-09-27 18:22:41
我需要从这个linq:中获取值
var joinPreRes = (from t1 in db.preguntas_respuestas
join t2 in db.respuesta1
on t1.id_respuesta equals t2.id
where t1.id_pregunta == id
group new
{
t1.id,
t1.id_respuesta,
t2.respuesta_visual,
t2.respuesta_valor
} by t1.id);
foreach (var a in joinPreRes)
{
}
如何访问foreach上的id或id_respuesta_visual???
您正在创建一个组,因此应该迭代分组的项。
var joinPreRes = from t1 in db.preguntas_respuestas
join t2 in db.respuesta1
on t1.id_respuesta equals t2.id
where t1.id_pregunta == id
group new
{
t1.id,
t1.id_respuesta,
t2.respuesta_visual,
t2.respuesta_valor
} by t1.id into GroupedItems
select GroupedItems;
foreach (var a in joinPreRes)
{
// a.Key is the t1.id
foreach (var subItem in a)
{
// subItem.id_respuesta <- other fields/properties
// subItem.respuesta_valor <- other fields/properties
}
}
使用选择函数选择(x=>x.id&&x.respuesta_visual);
您可能需要
group new
{
t1.id,
t1.id_respuesta,
t2.respuesta_visual,
t2.respuesta_valor
} by new
{
t1.id,
t1.id_respuesta,
t2.respuesta_visual,
t2.respuesta_valor
}
您遇到的每个a
都将是一个IGrouping
,其中Key
是一个整数,并且分组中有一个或多个元素。
由于id
用作Key
,您可以从a.Key
获得id
。
其余属性可以通过将a
视为IQueryable
来访问。例如:
var firstRespuesta = a.First().id_respuesta;
foreach(var item in a)
{
DoSomething(item.respuesta_visual);
}
等等。
问题的答案在于foreach
循环中的a
变量是匿名对象的集合,其属性在group new
块中定义。因此,要访问这些项目,您可以在foreach
块中执行以下操作:
foreach (var a in joinPreRes)
{
foreach (var item in a)
{
Console.WriteLine(item.id);
Console.WriteLine(item.id_respuesta_visual);
}
}
当然,您不必有内部的"foreach"循环,但这是我向您展示如何访问匿名项目的最简单方法。