2010-02-05 21 views
6

estoy teniendo un diablos de un tiempo con la transformación de un sencillo de consultas SQL en una consulta LINQ (usando VB por cierto)Agrupación usando LINQ

Aquí es mi SQL:

SELECT  USRDEFND5 
FROM   int_gp_employee 
GROUP BY USRDEFND5 

el XML se parece esto:

<int_gp_employee> 
    <row> 
    .... 
    <usrdefnd5>Some GUID</usrdefnd5> 
    </row> 
</int_gp_employee> 

He intentado una serie de variaciones diferentes de LINQ. Mi estado de cuenta actual es:

From b In xmlFile...<row> Group b...<usrdefnd5> By b...<usrdefnd5> INTO group

cuando forEach a través de la colección resultante, cada línea (17000) aparece.

Gracias por echar un vistazo.

Respuesta

0

encontrado la respuesta en otro hilo:

Here

From b In xmlFile...<row> Group b...<usrdefnd5> By b...<usrdefnd5> INTO group

debería haber sido

From row IN xmlFile...<row> SELECT row.<USRDEFND5>.value distinct

que obtiene el valor único y solo esa columna.

3

Me temo que no sé el equivalente VB con seguridad, pero en C# esto sería:

var query = from row in xmlFile.Descendants("row") 
      group row by (string) row.Element("usrdefnd5"); 

Sin utilizar literales XML, la VB sería:

Dim query = From row In document.Descendants("row") _ 
      Group row By CStr(row.Element("usrdefnd5")) 

EDIT: Si sólo necesita las claves distintas, entonces algo como:

Dim query = From row In document.Descendants("row") _ 
      Select CStr(row.Element("usrdefnd5")) _ 
      Distinct 
+0

Todavía devuelve todos ellos. Estoy buscando valores distintos de usrdefnd5. – spuppett

+0

Debería devolver todas las filas, pero agrupadas por ese campo. Cada grupo será una secuencia de filas con esa clave. ¿Necesita las filas, o * solo * las claves? –

+0

Solo necesito las llaves. – spuppett