2012-05-22 55 views
58

Tengo DataTable con dos columnas Autor y Bookname.Compruebe si el valor existe en dataTable?

Quiero comprobar si el valor de cadena dado Autor ya existe en el DataTable. ¿Hay algún método incorporado para verificarlo, como para Arrays array.contains?

+6

LINQ? 'table.Any (t => t.Author == author);' – Davio

Respuesta

157

Puede utilizar LINQ-to-DataSet con Enumerable.Any:

String author = "John Grisham"; 
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author")); 

Otro enfoque es utilizar DataTable.Select:

DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'"); 
if(foundAuthors.Length != 0) 
{ 
    // do something... 
} 

Q: ¿y si no sabemos las cabeceras de las columnas y queremos encontrar si cualquier valor de la celda PEPSI existe en ninguna columna rows'c? Puedo recorrerlo todo al , pero ¿hay una forma mejor? -

sí, se puede utilizar esta consulta:

DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray(); 
bool anyFieldContainsPepsi = tbl.AsEnumerable() 
    .Any(row => columns.Any(col => row[col].ToString() == "PEPSI")); 
+0

Agregue estos 'System.Data.DataSetExtensions' a la referencia y' using System.Linq; 'a using class – AsifAli72090

8

Puede usar Linq. Algo como:

bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0; 
0

puede establecer la base de datos como IEnumberable y usar linq para comprobar si los valores existen. echa un vistazo a este enlace

LINQ Query on Datatable to check if record exists

el ejemplo dado es

var dataRowQuery= myDataTable.AsEnumerable().Where(row => ... 

se podría complementar con cualquier donde

6
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name"); 
if (rw != null) 
{ 
// row exists 
} 

añadir a su uso de la cláusula:

using System.Linq; 

y añadir:

System.Data .DataSetExtensions

a las referencias.

4

Debe poder utilizar el método . Puedes hacerlo así.

if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0) 
    ... 

La función Select() funciton devuelve una matriz de DataRows para los resultados que coinciden con la instrucción where.