AuthorとBooknameの2つの列を持つDataTableがあります。
指定された文字列値AuthorがDataTableにすでに存在するかどうかを確認したいと思います。配列のように、それをチェックするための組み込みメソッドはあり array.contains
ますか?
AuthorとBooknameの2つの列を持つDataTableがあります。
指定された文字列値AuthorがDataTableにすでに存在するかどうかを確認したいと思います。配列のように、それをチェックするための組み込みメソッドはあり array.contains
ますか?
回答:
あなたは使用することができますLINQ-to-DataSet
とEnumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
別のアプローチは使用することDataTable.Select
です:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
Q:列ヘッダーがわからず、行の列にセル値
PEPSI
が存在するかどうかを確認したい場合はどうなりますか?すべてをループして見つけることができますが、もっと良い方法はありますか?–
はい、次のクエリを使用できます。
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
を参照およびusing System.Linq;
クラスの使用に追加します
DataTable.Select
LINQは完全な.NET Frameworkまたはカスタムメソッドを使用できるのに対し、古い構文は制限されています。したがって、.NET 2に固執している場合にのみ、を使用する必要がありますDataTable.Select
。それ以外の場合は、常にLINQを使用します
tbl.Select()
場合は、他のアプローチよりも劇的に高速です。
DataTable.Select()メソッドを使用できるはずです。このようにできます。
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
Select()関数は、whereステートメントに一致する結果のDataRowsの配列を返します。
データベースをIEnumberableとして設定し、linqを使用して値が存在するかどうかを確認できます。このリンクをチェックしてください
レコードが存在するかどうかを確認するためのDatatableに対するLINQクエリ
与えられた例は
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
あなたはどこででも補足することができます
table.Any(t => t.Author == author);