Tengo DataTable con dos columnas Author y Bookname .
Quiero verificar si el valor de cadena dado Autor ya existe en el DataTable. ¿Hay algún método incorporado para verificarlo, como para las matrices array.contains
?
Tengo DataTable con dos columnas Author y Bookname .
Quiero verificar si el valor de cadena dado Autor ya existe en el DataTable. ¿Hay algún método incorporado para verificarlo, como para las matrices array.contains
?
Respuestas:
Puede usar 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...
}
P: ¿qué
PEPSI
pasa si no conocemos los encabezados de las columnas y queremos saber si existe algún valor de celda en alguna fila de columnas? Puedo recorrerlo todo para averiguarlo, pero ¿hay una manera mejor? -
Sí, puede utilizar esta consulta:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
para referencia y using System.Linq;
para usar la clase
DataTable.Select
sintaxis anterior es limitada, mientras que LINQ puede usar el marco .NET completo o métodos personalizados. Entonces, solo si está atascado en .NET 2, debe usar DataTable.Select
; de lo contrario, siempre preferiría LINQ
tbl.Select()
es mucho más rápido que los otros enfoques.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
agregar a su cláusula de uso:
using System.Linq;
y añadir :
System.Data.DataSetExtensions
a las referencias.
Debería poder utilizar el método DataTable.Select () . Puedes hacerlo así.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
La función Select () devuelve una matriz de DataRows para los resultados que coinciden con la instrucción where.
puede configurar la base de datos como IEnumberable y usar linq para verificar si los valores existen. mira este enlace
Consulta LINQ en la tabla de datos para comprobar si existe un registro
el ejemplo dado es
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
podrías complementar donde con cualquier
table.Any(t => t.Author == author);