根据条件按字段更改顺序

时间:2011-05-19 10:22:43

标签: c# linq linq-to-sql lambda

我有一个场景,我必须根据某些条件按字段更改顺序。

from summaryRows in _summaryTable.AsEnumerable()
where summaryRows.Field<string>("AirlineDisplayName")
                 .Equals(airlineName_, StringComparison.OrdinalIgnoreCase) 
orderby summaryRows.Field<decimal>("FareAdult")
select new
{
    summaryTableRow = summaryRows
};

根据条件,我必须按字段更改为orderby summaryRows.Field<double>("BasePricePlusTaxAndFees") 这里,两种字段数据类型都不同。我怎么能在一个查询中做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为这将是最易读的,使用流畅的Linq语法并在构建查询时引入if语句。由于您没有解释您的条件,我假设您有一个名为condition的布尔变量,其值为:

var query = _summaryTable.AsEnumerable()
     .Where(
         summaryRows => summaryRows.Field<string>("AirlineDisplayName")
             .Equals(airlineName_, StringComparison.OrdinalIgnoreCase));

if (condition)
    query = query.OrderBy(summaryRows => summaryRows.Field<decimal>("FareAdult"));
else
    query = query.OrderBy(summaryRows => summaryRows.Field<double>("BasePricePlusTaxAndFees"));

var resultQuery = query.Select(summaryRows => new
    {
        summaryTableRow = summaryRows
    });

免责声明:我没有测试过,但祝你好运。

答案 1 :(得分:0)

这个怎么样:

orderby conditionIsTrue ? (IComparable)summaryRows.Field<double>("BasePricePlusTaxAndFees") : (IComparable)summaryRows.Field<decimal>("FareAdult")