Comment obtenir une valeur de colonne spécifique à partir d'un DataTable?
J'ai un datatable. J'ai besoin de récupérer une certaine valeur de colonne en fonction de l'entrée de l'utilisateur. Par exemple, disons que le datatable a deux colonnes CountryID et CountryName.
J'ai besoin de trouver CountryID dans le datatable basé sur le nom de pays d'entrée de l'utilisateur. Je pourrais simplement ouvrir une connexion avec DB et exécuter la requête select countryID from Country where countryName = @ userinput. Y at-il de toute façon je pourrais le faire sur le datatable.
5 réponses
string countryName = "USA";
DataTable dt = new DataTable();
int id = (from DataRow dr in dt.Rows
where (string)dr["CountryName"] == countryName
select (int)dr["id"]).FirstOrDefault();
foreach (DataRow row in Datatable.Rows)
{
if (row["CountryName"].ToString() == userInput)
{
return row["CountryID"];
}
}
Bien que cela puisse ne pas compiler directement, vous devriez avoir l'idée, aussi je suis sûr qu'il serait largement supérieur de faire la requête via SQL car un énorme datatable prendra beaucoup de temps à parcourir toutes les lignes.
Je suggère une telle façon basée sur des méthodes d'extension:
IEnumerable<Int32> countryIDs =
dataTable
.AsEnumerable()
.Where(row => row.Field<String>("CountryName") == countryName)
.Select(row => row.Field<Int32>("CountryID"));
Système.Données.DataSetExtensions.dll doit être référencé.
Je suppose que vous pourriez utiliser un objet DataView à la place, cela vous permettrait alors de profiter de la propriété RowFilter comme expliqué ici:
Http://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx
private void MakeDataView()
{
DataView view = new DataView();
view.Table = DataSet1.Tables["Countries"];
view.RowFilter = "CountryName = 'France'";
view.RowStateFilter = DataViewRowState.ModifiedCurrent;
// Simple-bind to a TextBox control
Text1.DataBindings.Add("Text", view, "CountryID");
}
Datatables ont un .Sélectionnez la méthode, qui renvoie un tableau de lignes selon les critères que vous spécifiez. Quelque chose comme ceci:
Dim oRows() As DataRow
oRows = dtCountries.Select("CountryName = '" & userinput & "'")
If oRows.Count = 0 Then
' No rows found
Else
' At least one row found. Could be more than one
End If
Bien sûr, si userinput contient ' character, il déclenchera une exception (comme si vous interrogez la base de données). Vous devriez échapper aux ' caractères (j'utilise une fonction pour le faire).