Select a DataRow from a DataRow [] collection

asp.net, c#

Solution

Instead of fiddling around with the expression syntax i would use Linq:

IEnumerable<DataRow> rows = ByTotalTemplate.AsEnumerable()
           .Where(r => r.Field<int>("TEMPLATE_ID") == DisTemplateID
                    && r.Field<int>("MIN_AMOUNT") < quantity
                    && r.Field<int>("MAX_AMOUNT") > quantity);

If you want a new DataTable with the filtered result:

DataTable table = rows.CopyToDataTable();

Note that `CopyToDataTable` throws an exception if there are no rows since it must derive the columns from the rows. So you have to check it before. You could use:

DataTable table = ByTotalTemplate.Clone();
if(rows.Any())
    table = rows.CopyToDataTable();

If you want an array instead:

DataRow[] rowArray = rows.ToArray();

If you just want the first row:

DataRow row = rows.FirstOrDefault(); // can be null if there is no matching row

Btw, your problem was that you used `DataTable.Select` on a `DataRow[]`

Problem

My code : ``` DataRow[] row = ByTotalTemplate.Select("TEMPLATE_ID=" + DisTemplateID); ``` A row contains `TEMPLATE_ID`,`MIN_AMOUNT`,`MAX_AMOUNT` and `DISCOUNT` Now I want to select a row where a given amount is between `MIN_AMOUNT` and `MAX_AMOUNT` I tried to do this : ``` DataRow amountRow = row.Select("MIN_AMOUNT<" + quantity + " AND MAX_AMOUNT>" + quantity); ``` but this didn't work.

Original source