loop ienumerable并获取值

时间:2015-11-18 16:36:07

标签: c# linq ienumerable linq-to-objects

我需要从这个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 ???

5 个答案:

答案 0 :(得分:3)

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

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
    }
}

答案 1 :(得分:0)

使用选择功能         选择(x =&gt; x.id&amp;&amp; x.respuesta_visual);

答案 2 :(得分:0)

可能你需要

import java.util.*;

public class World{
    private static final String P="P";
    private String[][] array;

    public World(){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter number of row: ");
        int crow = input.nextInt();
        System.out.println("Enter number of columns: ");
        int ccol = input.nextInt();
        array = new String[crow][ccol]; 
        array[0][0]=P;
    }


    public void displayWorld(){
        System.out.println();
        for(int i=0;i<array.length;i++){
            for (int j=0;j<array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }

    public void moveUp(){

    }

    public void moveDown(){
        for(int i=0;i<array.length;i++){
            for (int j=0;j<array[i].length;j++){
                if ((array[i][j])!=null){
                    if (i<array.length-1){
                        array[i][j]=null;
                        array[i+1][j]=P;
                    }
                    return;
                }
            }
        }
    }

    public void moveLeft(){

    }

    public void moveRight(){

    }

    public static void main(String[] args){
        World world=new World();
        world.displayWorld();
        world.moveDown();
        world.displayWorld();

    }
}

答案 3 :(得分:0)

您遇到的每个a都是IGrouping,其中Key是一个整数,并且分组中有一个或多个元素。

由于id用作Key,您只能从id获取a.Key

可以通过将a视为IQueryable来访问其余属性。例如:

var firstRespuesta = a.First().id_respuesta;

foreach(var item in a)
{
  DoSomething(item.respuesta_visual);
}

等等。

答案 4 :(得分:0)

您的问题的答案在于a循环中的foreach变量是具有group new块中定义的属性的匿名对象的集合。因此,要访问这些项目,您可以在foreach块中执行以下操作:

foreach (var a in joinPreRes)
{
   foreach (var item in a)
   {
      Console.WriteLine(item.id);
      Console.WriteLine(item.id_respuesta_visual);
   }
}

当然,你不必拥有一个内在的'foreach'循环,但这是向我展示如何访问匿名项目的最简单方法。