c# - 从 DataRow[] 集合中选择一个 DataRow

标签 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);

但这没有用。

最佳答案

我不会摆弄表达式语法,而是使用 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

顺便说一句,您的问题是您在 DataRow[]

上使用了 DataTable.Select

关于c# - 从 DataRow[] 集合中选择一个 DataRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567830/

相关文章:

c# - 使用局部 View 时不显示表单验证消息

c# - 如何使用 LINQ to XML 检索更深层次的 sibling ?

c# - 使用可变变量调用对象的属性,如 PHP

asp.net - IIS url 重写角色,除了一些 url

asp.net - .NET StreamReader 不会关闭

asp.net - IIS Web-Garden 强制进程初始化可能吗?

asp.net - IsPostBack 在页面加载中的实现

c# - 如果字典键为可为空的十进制,则 Mvc SelectList 不绑定(bind)

c# - 在 Ajax 调用中使用动态加载的控件注册客户端脚本

asp.net - 在新窗口中写入输出流