El siguiente código:LINQ to SQL - ¿Por qué no puede usar un WHERE después de un ORDER BY?
// select all orders
var orders = from o in FoodOrders
where o.STATUS = 1
order by o.ORDER_DATE descending
select o;
// if customer id is specified, only select orders from specific customer
if (customerID!=null)
{
orders = orders.Where(o => customerID.Equals(o.CUSTOMER_ID));
}
me da el siguiente error:
Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Linq.IOrderedQueryable'. An explicit conversion exists (are you missing a cast?)
He arreglado el error al hacer la clasificación al final:
// select all orders
var orders = from o in FoodOrders
where o.STATUS = 1
select o;
// if customer id is specified, only select orders from specific customer
if (customerID!=null)
{
orders = orders.Where(o => customerID.Equals(o.CUSTOMER_ID));
}
// I'm forced to do the ordering here
orders = orders.OrderBy(o => o.ORDER_DATE).Reverse();
Pero me pregunto ¿Por qué esta limitación está en su lugar? ¿Cuál es la razón por la que la API se diseñó de tal manera que no se puede agregar una restricción where
después de usar un operador order by
?
¿Qué es una consulta no-op? – MCS
Esta es una respuesta realmente minuciosa y una gran explicación. Gracias. – MCS
@MCS: Quise decir una proyección no operativa, una cláusula de selección que solo selecciona lo que ya está allí, si entiendes lo que quiero decir. –