Ну, это зависит от того, какую версию C # и .NET вы используете, для 3.5 вы можете сделать это с помощью LINQ:
var qualiyfyingRows =
from row in rows
where Equals(row["MyColumn"], value)
select row;
// We can see if we found any at all through.
bool valueFound = qualifyingRows.FirstOrDefault() != null;
Это даст вам как совпадающие строки, так и бул, который сообщит вам, нашли ли вы их вообще.
Однако, если у вас нет LINQ или методов расширения, которые поставляются с ним, вам придется искать в списке «старый skool»:
DataRow matchingRow = null;
foreach (DataRow row in rows)
{
if (Equals(row["MyColumn"], value))
{
matchingRow = row;
break;
}
}
bool valueFound = matchingRow != null;
Что даст вам первую совпадающую строку, очевидно, ее можно изменить, чтобы найти все совпадающие строки, что сделает два примера более или менее равными.
Версия LINQ имеет существенное отличие, хотя IEnumerable, который вы получаете от него, откладывается, поэтому вычисления не будут выполнены, пока вы фактически не перечислите его члены. Я не знаю достаточно о DataRow или вашем приложении, чтобы знать, может ли это быть проблемой или нет, но это была проблема в части моего кода, которая имела дело с NHibernate. По сути, я перечислял последовательность, члены которой больше не действительны.
Вы можете легко создавать свои собственные отложенные IEnumerables с помощью итераторов в C # 2.0 и выше.