2015-09-29 4 views
-2

У меня есть datatable, который имеет 3 столбца «Имя», «Тип», «ID». Я хочу использовать только один столбец для сравнения. Что такое «Тип». Я хотел, чтобы этот столбец помещал его в DataColumn, отделенном от datatable, сравнивал значения ячеек в нем со строкой и затем передавал строку, если она соответствует. Я не уверен, если этот метод является правильным или неправильным, я даже не знаю, как получить строковое значение из ячеек (строк) в этом DataColumn можно сравнитьВыбор столбца из datatable для проверки его значений

Вот мой код для этого:

DataTable Griddetails; 
Griddetails = RxMUaClient.BrowseGrid("2", "127.0.0.1:48030", nodepassed); 

var myColumn = Griddetails.Columns.Cast<DataColumn>() 
          .SingleOrDefault(col => col.ColumnName == "Type"); 

return Json(myColumn); 
if (myColumn != null) 
{ 
    for (int i = 0; i <= myColumn.; i++) 
    { 

    } 
} 

Я пытаюсь получить счет datarow в dataColumn либо за цикл for, либо foreach, foreach не работает для некоторой ошибки, и я не знаю, как получить значение datacolumn для цикла for.

Любая помощь?

+0

Я не понимаю ваш вопрос. 'myColumn' - это единственная' DataColumn'. Столбцы относятся к таблице. Таблица может иметь несколько «DataRows», и каждая строка имеет значения для каждого столбца. Но в целом число строк для одного столбца совпадает с количеством строк в таблице. –

+0

Да, мой вопрос: я хочу знать количество строк в этом столбце, чтобы иметь возможность проверить это в функции сравнения. – KamalF

+0

Каждый столбец имеет такое же количество строк, что и сама таблица, поэтому 'myColumn.Table.Rows.Count' , Ваш вопрос по-прежнему бессмысленен, не так ли? –

ответ

0

Даже если вопрос еще не имеет большого смысла для меня, если вы просто хотите знать, сколько строк в таблице есть, что принадлежит к данному DataColumn:

int rowCount = myColumn.Table.Rows.Count; 

Обратите внимание, что вы не делаете нужен запрос LINQ, чтобы найти столбец, вы можете использовать DataColumnCollectionindexer that takes a string:

DataColumn myColumn = Griddetails.Columns["Type"]; 

Он работает по желанию, если нет столбца с таким именем и возвращает null.


После вашего отредактированного вопроса кажется, что вы действительно хотите найти строки, в которых тип-столбец содержит заданное значение. Вы можете использовать LINQ:

var matchingRows = from row in Griddetails.AsEnumerable() 
        where row.Field<string>("Type") == valueYouSearch 
        select row; 

DataRow firstRow = matchingRows.FirstOrDefaul(); 
if(firstRow != null) 
{ 
    // here you know that there is at least one row with that value in the type-column 
    string firstType = firstRow.Field<string>("Type"); // pointless, maybe you want to return different column's value 
    // .... 
} 
+0

Спасибо, пожалуйста, проверьте мой вопрос еще раз, надеюсь, что это яснее. – KamalF

+0

@KamalF: теперь ваше требование кажется другим. Вы хотите найти значение в столбце строки. Какая ценность? Что вы хотите делать с соответствующими строками? Просто проверьте, существует ли значение или возвращают соответствующие строки? –

+0

просто проверьте, существует ли значение, и если да, оно возвращает значение, если оно не возвращает пустую строковую переменную – KamalF