2009-10-03 21 views
16

¿Cómo puedo seleccionar la primera fila en una declaración de selección linq sin utilizar foreach?LINQ SELECCIONE PRIMERA FILA

Uso foreach y luego me rompo; pero tiene que ser una mejor manera?

Me gusta obtener el valor en la primera fila; Además, compruebe si no se encuentra ninguna fila. Mi problema es obtener el valor sin declaración foreach.

Lo que hago es encontrar un valor en mi DataTable y sé que la fila es única; entonces me gusta hacer una selección y obtener el valor; además de hacer una verificación si no hay éxito para estar seguro ... :)

Este es el código que uso ahora, ver a continuación

Gracias, runa

var var_QUERY_linq = 
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable() 
    where vm_TABLE_PK.Field<Int32>("MyField_Int32") == vmp_ROW_Counter_Int32 
    select vm_TABLE_PK; 

foreach (DataRow o_DataRow in var_QUERY_linq) 
{ 
     vmp_Return_string = o_DataRow.Field<string>("Myfield_nvarchar"); 

     break; 
} 

Respuesta

38

Sólo tiene que utilizar. FirstOrDefault()

var var_QUERY_linq = (
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable() 
    where vm_TABLE_PK.Field<Int32>("MyField_Int32") == vmp_ROW_Counter_Int32 
    select vm_TABLE_PK).FirstOrDefault(); 

if(var_QUERY_linq != null) 
{ 
    //There is a record 
} 
+0

yo no creen que el cheque nulo nunca dará vuelta encima de cualquier cosa, siempre y cuando se utilice FirstOrDefault . Creo que lo que quieres es .Primero() en su lugar. –

+10

.Primero() arroja una excepción cuando no se devuelve nada, mientras que FirstOrDefault() devuelve un valor nulo (en cada situación que he visto. –

+3

@David Hall tiene razón. Use .First() si espera que siempre haya uno o más registros para que obtenga una excepción si no ocurre. Si está esperando la posibilidad de que no haya registros, use .FirstOrDefault() y verifique null y maneje apropiadamente. –

0

asumo MiCampo es el campo que desea obtener el valor de

var result = vm_Table_Pk.DefaultIfEmpty().First().MyField; 

También puede establecer el resultado predeterminado que no sea NULL. Al igual que:

var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField; 

Y no se preocupe Intellisense le ayudará a lo largo de este camino.

+0

AGRADABLE! ¿Cómo obtengo mi valor sin información complementaria: vmp_Return_string = o_DataRow.Field ("Myfield_nvarchar"); –

+0

@RBC, cambié el código de acuerdo con su pregunta. – Tarik

3

Tengo un problema con el orden del artículo (OrderBy) cuando uso FirstOrDefault para encontrar el primer elemento de la lista.

Yo sugeriría que usted utilice tarda en llegar el primer elemento:

var_QUERY_linq.Take(1).FirstOrDefault() 

* Utilizar siempre el Analizador de SQL si es posible comprobar la consulta que se envía al servidor SQL.

+0

AGRADABLE! ¡Gracias! –

+0

¡Buena respuesta! Weldone cómo Lun – Amit

4

.First() tomará solo el nombre o La sola() tendrá la primera y elevar una excepción si hay más

Cuestiones relacionadas