循环 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' 循环,但这是我向您展示如何访问匿名项目的最简单方法。