循环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???

循环ienumerable并获取值

您正在创建一个组,因此应该迭代分组的项。

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