2015-11-18 2 views
1

мне нужно получить значения из этого LINQ:петля 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); 


foreach (var a in joinPreRes) 
{ 


} 

, как получить доступ к идентификатору или id_respuesta_visual на Еогеасп ???

+2

Когда вы отлаживаете это, какие свойства имеет 'a'? – David

+2

@ Давид: даже не отлаживать, intellisense должен быть в состоянии дать OP ответ. –

+0

Доступ к 'id_respuesta_visual' в вашем' foreach' не имеет смысла, вы сгруппированы по другим критериям, для каждого 'a' нет уникального' id_respuesta_visual'. – nvoigt

ответ

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

Использовать функцию выбора Выбрать (x => x.id & & x.respuesta_visual);

0

вероятно вам нужен

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

И так далее.

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

Конечно, вы не должны иметь внутренний «Еогеасп» цикл, но это самый простой способ для меня, чтобы показать вам, как получить доступ к анонимным элементам.

Смежные вопросы