循环 ienumerable 并获取值
loop ienumerable and get values
我需要从这个 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???
使用select函数
Select(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
}
您正在创建一个组,因此您应该迭代分组的项目。
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
}
}
您遇到的每个 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' 循环,但这是我向您展示如何访问匿名项目的最简单方法。
我需要从这个 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???
使用select函数 Select(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
}
您正在创建一个组,因此您应该迭代分组的项目。
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
}
}
您遇到的每个 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' 循环,但这是我向您展示如何访问匿名项目的最简单方法。