2011-05-19 57 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