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-DataSetcon 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é
PEPSIpasa 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.DataSetExtensionspara referencia y using System.Linq;para usar la clase
DataTable.Selectsintaxis 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);