Выбор данных с несколькими условиями
У меня есть datatable с 4 столбцами A, B, C и D, так что конкретная комбинация значений для столбцов A, B и C уникальна в datatable.
Цель: Чтобы найти значение столбца D для данной комбинации значений для столбцов A, B и C.
Я предполагаю, что цикл по набору строк данных должен это сделать. Есть ли способ использовать Datatable.Select() для этого? Чтобы быть более конкретным - могу ли я иметь несколько условий в фильтре выбора, то есть логическое условие оператора И для каждого из столбцов A, B и C.
Ответы
Ответ 1
Да, метод DataTable.Select
поддерживает логические операторы таким же образом, что вы использовали бы их в "реальном" выражении SQL:
DataRow[] results = table.Select("A = 'foo' AND B = 'bar' AND C = 'baz'");
См. DataColumn.Expression в MSDN для синтаксиса, поддерживаемого методом DataTable Select
.
Ответ 2
Вам нужно использовать DataTable.Select()
? Я предпочитаю писать запрос linq для такого рода вещей.
var dValue= from row in myDataTable.AsEnumerable()
where row.Field<int>("A") == 1
&& row.Field<int>("B") == 2
&& row.Field<int>("C") == 3
select row.Field<string>("D");
Ответ 3
Я обнаружил, что слишком много и возвратит неверные результаты (для .NET 1.1 в любом случае)
DataRow[] results = table.Select("A = 'foo' AND B = 'bar' AND C = 'baz' and D ='fred' and E = 'marg'");
В моем случае A было 12-м полем в таблице, и выбор фактически игнорировал его.
Однако, если бы я сделал
DataRow[] results = table.Select("A = 'foo' AND (B = 'bar' AND C = 'baz' and D ='fred' and E = 'marg')");
Фильтр работал правильно!
Ответ 4
Попробуйте это,
Я думаю, это одно из простых решений.
int rowIndex = table.Rows.IndexOf(table.Select("A = 'foo' AND B = 'bar' AND C = 'baz'")[0]);
string strD= Convert.ToString(table.Rows[rowIndex]["D"]);
Убедитесь, что сочетание значений для столбцов A, B и C уникально в datatable.
Ответ 5
protected void FindCsv()
{
string strToFind = "2";
importFolder = @"C:\Documents and Settings\gmendez\Desktop\";
fileName = "CSVFile.csv";
connectionString= @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="+importFolder+";Extended Properties=Text;HDR=No;FMT=Delimited";
conn = new OdbcConnection(connectionString);
System.Data.Odbc.OdbcDataAdapter da = new OdbcDataAdapter("select * from [" + fileName + "]", conn);
DataTable dt = new DataTable();
da.Fill(dt);
dt.Columns[0].ColumnName = "id";
DataRow[] dr = dt.Select("id=" + strToFind);
Response.Write(dr[0][0].ToString() + dr[0][1].ToString() + dr[0][2].ToString() + dr[0][3].ToString() + dr[0][4].ToString() + dr[0][5].ToString());
}
Ответ 6
Dim dr As DataRow()
dr = dt.Select("A="& a & "and B="& b & "and C=" & c,"A",DataViewRowState.CurrentRows)
Где A, B, C - имена столбцов
где второй параметр предназначен для выражения сортировки