2015-12-07 4 views
0

Столбец оклада оклада string, и пользователь вводит значение в формате строки, например userInput="1000". Но данные, хранящиеся в столбце зарплаты, приведены ниже. Как сравнить пользовательский ввод с данными, хранящимися в таблице данных?Сравнение значений строк с двойным значением в DataTable.Select()

enter image description here

Мой текущий код

DataRows[] rows = dt.Select("Salary='"+userInput+"'"); 
+0

Try {} для преобразования типа либо один, на другой, в случае успеха сравнивать ... –

ответ

0

Чтобы избежать проблем с форматированием, лучше сравнить числовые значения. DataTable выбрать фильтр поддерживает Convert функцию:

var dt = new DataTable(); 
dt.Columns.Add("Salary", typeof(string)); 

// test values 
dt.Rows.Add("0.10000"); 
dt.Rows.Add(".1"); 
dt.Rows.Add("-.1"); 
dt.Rows.Add("1.1"); 

decimal salary; 
string userInput = "0.10"; 
if (decimal.TryParse(userInput, out salary)) 
{   
    DataRow[] matchedRows = dt.Select("Convert(Salary, 'System.Decimal') = " + salary.ToString()); 
    foreach(var r in matchedRows) 
     Console.WriteLine(r["Salary"]); 
} 

результат:

.1 
0.10000 
3

Я хотел бы использовать Linq-To-DataTable:

decimal value; 
if(decimal.TryParse(userInput, out value)) 
{ 
    var filteredRows = from row in dt.AsEnumerable() 
         where row.Field<decimal>("Salary") == value 
         select row; 
    // if you want an array: 
    DataRow[] rows = filteredRows.ToArray(); 
} 

Если вы настаиваете на использовании DataTable.Select вы должны удалить апостроф:

DataRow[] rows = table.Select("Salary=" + userInput); 

Но это предполагает, что входное значение использует английский формат (так, например, f.e. не используя другой десятичный разделитель, такой как запятая, которая даже вызывает SyntaxErrorException).


Если тип столбца на самом деле string вам нужно разобрать его, чтобы удвоить или десятичное:

var filteredRows = from row in dt.AsEnumerable() 
        where decimal.Parse(row.Field<string>("Salary")) == value 
        select row; 

Но в этом CAE вы должны лучше исправить неправильный тип данных вместо этого.

+1

я понял, что OP his'Salary' Столбец также имеет строку типа. Так что 'row.Field ' действительно работает? –

+0

@ RenéVogt: Я думаю, что это двойное или десятичное число, поэтому код OP не работает. Если он настаивал на использовании 'DataTable.Select', ему нужно было бы удалить апострофы, как в:' dt.Select ("Salary =" + userInput) '. Но тогда это зависит от текущей культуры, если преобразование строк не вызывает другой проблемы. –

Смежные вопросы