执行DataTable的聚合功能

时间:2011-05-11 12:45:35

标签: c# asp.net linq ado.net

我必须在DataTable上执行聚合函数,比如Datatable.Compute,但是计算返回我想在数据表上执行聚合函数的对象并获取数据行。

_summaryTable.Compute("min(FareAdult)", whereClause 
                        + "AirlineDisplayName='" 
                        + Convert.ToString(airline["AirlineDisplayName"]) 
                        + "' and ( Stops=0) ");

但是上面的代码只会返回 min(FareAdult),但我想根据数据表中的上述条件选择两列。

我怎么能通过Linq做到这一点 我必须选择 min(FareAdult)和同一行的 TotelPrice

3 个答案:

答案 0 :(得分:0)

使用Select代替compute

_summaryTable.Select("FilterationExpression");

DataRow[] dr = _summaryTable.Select("min(FareAdult),AirlineDisplayName='" + Convert.ToString(airline["AirlineDisplayName"]) + "' and ( Stops=0) ");

答案 1 :(得分:0)

这是一个LINQ方法。这是伪代码,因为我不知道你的行的输入,我无法测试它,但想法是一样的。使用LINQ选择符合条件的行,按FareAdult排序,然后选择第一个(最小)。

var minResult = (from row in _summaryTable.Rows
                where row.AirlineDisplayName == airline["AirlineDisplayName"] && row.Stops == 0
                orderby row.FareAdult
                select row).FirstOrDefault();

答案 2 :(得分:0)

private void CalcColumns()
{
    DataTable table = new DataTable ();

    //enter code here

    // Create the first column.
    DataColumn priceColumn = new DataColumn();
    priceColumn.DataType = System.Type.GetType("System.Decimal");
    priceColumn.ColumnName = "price";
    priceColumn.DefaultValue = 50;

    // Create the second, calculated, column.
    DataColumn taxColumn = new DataColumn();
    taxColumn.DataType = System.Type.GetType("System.Decimal");
    taxColumn.ColumnName = "tax";
    taxColumn.Expression = "price * 0.0862";

    // Create third column.
    DataColumn totalColumn = new DataColumn();
    totalColumn.DataType = System.Type.GetType("System.Decimal");
    totalColumn.ColumnName = "total";
    totalColumn.Expression = "price + tax";

    // Add columns to DataTable.
    table.Columns.Add(priceColumn);
    table.Columns.Add(taxColumn);
    table.Columns.Add(totalColumn);

    DataRow row = table.NewRow();
    table.Rows.Add(row);
    DataView view = new DataView(table);
    dataGrid1.DataSource = view;
}