从DataRow []集合中选择DataRow

Sor*_*ora 8 c# asp.net

我的代码:

DataRow[] row = ByTotalTemplate.Select("TEMPLATE_ID=" + DisTemplateID);
Run Code Online (Sandbox Code Playgroud)

一行包含TEMPLATE_ID,MIN_AMOUNT,MAX_AMOUNTDISCOUNT

现在我想选择给定金额介于MIN_AMOUNT和之间的行MAX_AMOUNT

我试着这样做:

DataRow amountRow = row.Select("MIN_AMOUNT<" + quantity + " AND MAX_AMOUNT>" + quantity);
Run Code Online (Sandbox Code Playgroud)

但这没用.

Tim*_*ter 10

而不是摆弄表达式语法我会使用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);
Run Code Online (Sandbox Code Playgroud)

如果您想要一个带有过滤结果的新DataTable:

DataTable table = rows.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

请注意,CopyToDataTable如果没有行,则抛出异常,因为它必须从行派生列.所以你必须先检查一下.你可以使用:

DataTable table = ByTotalTemplate.Clone();
if(rows.Any())
    table = rows.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

如果你想要一个数组:

DataRow[] rowArray = rows.ToArray();
Run Code Online (Sandbox Code Playgroud)

如果你只想要第一行:

DataRow row = rows.FirstOrDefault(); // can be null if there is no matching row
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的问题是你用过DataTable.SelectDataRow[]