Mam DataTable z dwiema kolumnami Autor i Bookname .
Chcę sprawdzić, czy podana wartość ciągu Autor już istnieje w DataTable. Czy jest jakaś wbudowana metoda sprawdzania tego, jak w przypadku tablic array.contains
?
Mam DataTable z dwiema kolumnami Autor i Bookname .
Chcę sprawdzić, czy podana wartość ciągu Autor już istnieje w DataTable. Czy jest jakaś wbudowana metoda sprawdzania tego, jak w przypadku tablic array.contains
?
Odpowiedzi:
Możesz używać LINQ-to-DataSet
z Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Innym podejściem jest użycie DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
P: co się stanie, jeśli nie znamy kolumn Nagłówki i chcemy sprawdzić, czy jakakolwiek wartość komórki
PEPSI
istnieje w kolumnach z wierszami? Mogę to wszystko zapętlić, aby się dowiedzieć, ale czy jest lepszy sposób? -
Tak, możesz użyć tego zapytania:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
do odniesienia i using System.Linq;
do korzystania z klasy
DataTable.Select
składnia jest ograniczona, podczas gdy LINQ może używać pełnej platformy .NET lub metod niestandardowych. Więc tylko jeśli utkniesz na .NET 2, powinieneś użyć DataTable.Select
, w przeciwnym razie zawsze wolałbym LINQ
tbl.Select()
jest znacznie szybszy niż inne podejścia.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
dodaj do swojej klauzuli using:
using System.Linq;
i dodaj :
System.Data.DataSetExtensions
do referencji.
Powinieneś móc użyć metody DataTable.Select () . Możesz nam to w ten sposób.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
Funkcja Select () zwraca tablicę DataRows dla wyników zgodnych z instrukcją where.
możesz ustawić bazę danych jako IEnumberable i użyć linq, aby sprawdzić, czy wartości istnieją. sprawdź ten link
Zapytanie LINQ w Datatable, aby sprawdzić, czy rekord istnieje
podany przykład to
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
możesz uzupełnić gdziekolwiek
table.Any(t => t.Author == author);