根据条件按字段更改订单
问题描述:
我有一个场景,我必须根据某些条件按字段更改订单。根据条件按字段更改订单
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")
这里,两个字段数据类型是不同的。我怎样才能在一个查询中做到这一点?
答
这个什么:
orderby conditionIsTrue ? (IComparable)summaryRows.Field<double>("BasePricePlusTaxAndFees") : (IComparable)summaryRows.Field<decimal>("FareAdult")
答
我认为这将是最可读的使用流利的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
什么条件? – 2011-05-19 10:31:11