从DataRow []集合中选择DataRow

时间:2013-07-10 10:05:37

标签: c# asp.net

我的代码:

DataRow[] row = ByTotalTemplate.Select("TEMPLATE_ID=" + DisTemplateID);

一行包含TEMPLATE_IDMIN_AMOUNTMAX_AMOUNTDISCOUNT

现在我想选择给定金额介于MIN_AMOUNTMAX_AMOUNT

之间的行

我试着这样做:

DataRow amountRow = row.Select("MIN_AMOUNT<" + quantity + " AND MAX_AMOUNT>" + quantity);

但这不起作用。

3 个答案:

答案 0 :(得分:9)

不使用表达式语法,而是使用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);

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

DataTable table = rows.CopyToDataTable();

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

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

如果你想要一个数组:

DataRow[] rowArray = rows.ToArray();

如果您只想要第一行:

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

顺便说一下,您的问题是您在DataTable.Select

上使用了DataRow[]

答案 1 :(得分:3)

如果要使用DataTable方法,则必须再次从Select()中选择行

DataRow[] rowsBetween = ByTotalTemplate.Select("TEMPLATE_ID = " + DisTemplateID + " AND MIN_AMOUNT < " + qunatity + " AND MAX_AMOUNT > " + qunatity);

答案 2 :(得分:1)

试试这个

        DataRow[] row = ByTotalTemplate.Select("TEMPLATE_ID=" + DisTemplateID);
        //
        //some use of **row** here 
        //than after select record from **row**
        DataRow[] amountRow = row.CopyToDataTable().Select("MIN_AMOUNT < " + qunatity + " AND MAX_AMOUNT > " + qunatity);