2011-05-19 46 views
1

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

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") 这里,两个字段数据类型是不同的。我怎样才能在一个查询中做到这一点?

+1

什么条件? – 2011-05-19 10:31:11

回答

0

这个什么:

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

我认为这将是最可读的使用流利的LINQ的语法和在构建查询引入if语句..既然你不解释你的情况,我认为你有一个布尔变量称为条件与适当的值:

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 
    }); 

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

+0

尽管有一个问题,您可能需要在最后为投影声明一个单独的变量。 'query'具有可排序的'DataRow'枚举。投影将类型更改为匿名类型的枚举。 – 2011-05-19 11:45:40

+0

@Jeff:没错。我更新了这个例子。 – 2011-05-19 11:55:59