Подтвердить что ты не робот

Выбор данных с несколькими условиями

У меня есть datatable с 4 столбцами A, B, C и D, так что конкретная комбинация значений для столбцов A, B и C уникальна в datatable.

Цель: Чтобы найти значение столбца D для данной комбинации значений для столбцов A, B и C.

Я предполагаю, что цикл по набору строк данных должен это сделать. Есть ли способ использовать Datatable.Select() для этого? Чтобы быть более конкретным - могу ли я иметь несколько условий в фильтре выбора, то есть логическое условие оператора И для каждого из столбцов A, B и C.

4b9b3361

Ответ 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 - имена столбцов где второй параметр предназначен для выражения сортировки