2010-09-27 8 views
7

estoy usando OrdenarPor IEnumerable para ordenar mis artículos en formato ascendente, pero no funciona mi consulta es la siguiente:IEnumerable OrdenarPor

IEnumerable<Step> steps = allsteps.Where(step => step.X <= Y); 

steps = steps.OrderBy(step => step.X); 

no es deffer utilizar OrdenarPor o OrderByDescending

por qué?

Quiero usar Sum() método para resumir algunos artículos y pedidos de artículos es importante (hay algunas reglas)

leí en MSDN que se deben enumerar a trabajar, pero cuál es el buen camino (no lo hice intentalo).

EDITAR: X y Y son del tipo double. He comprobado el primer elemento de mis pasos (pasos.Primero()) en la vigilancia rápida.

+2

¿Cuál es el tipo de X? –

+1

¿Cómo se examina el resultado? –

+1

Al verificar solo el primer elemento ... ¿está seguro de que todos los elementos en 'pasos' no tienen el mismo valor X? – digEmAll

Respuesta

8

Antes que nada, ¿por qué no mantenerlo en una línea?

var steps = allsteps.Where(step => step.X <= Y).OrderBy(step => step.X); 

Como "vc 74" señaló en su comentario, si X no es primitivo o no implementa IComparable o IComparable<TypeOfX> entonces no vas a ser capaz de ordenar su lista, con o sin LINQ .

3

Esto sólo funciona como se espera:

// Create some random double values from 0 - 100 
var values = Enumerable.Repeat(new Random(), int.MaxValue) 
         .Select(r => r.NextDouble() * 100); 

//Create an enumeration with ten elements 
var pointList = values.Take(10) 
         //Cause of lacking support of IEnumerable.Zip() or .Pairwise() 
         //use this approach to create something with the properties X and Y 
         .Select(n => new PointF((float)n, (float)values.First())); 

//Sort the elements 
var sortedPoints = pointList.OrderBy(point => point.X); 

//Output to console 
foreach (var point in sortedPoints) 
{ 
    Console.WriteLine(point.ToString()); 
} 
3

encontramos con un problema muy similar a este:

IEnumerable<Article> articles = StepThree.ReturnArticles(iUserID); 
lvPending.DataSource = articles; 
lvPending.DataBind(); 

quería cambiar el orden de los resultados serían entonces unirse a mi vista de lista, así que trató esto:

lvPending.DataSource = articles.OrderByDescending(a=> a.DateCreated); 

Se ejecutó, pero no actualizó mis resultados. Así que buscando más descubrí que, como estoy devolviendo un tipo complejo, linq no puede encargarlo, así que tuve que agregar el orden descendiendo en el archivo StepThree.cs donde se llama al método ReturnArticles.

+0

Hola David, esta pregunta fue para cuando era nuevo en linq :) fue un simple error y funciona bien, pero no pude verlo (en ese momento). –

+0

@SaeedAmiri: Como resolvió su problema, es una buena práctica publicar su solución para otras personas que tropiecen con esta publicación. –

+0

@Matthew, Podías ver los comentarios sobre la pregunta, de hecho no había ningún problema, la lista tiene un elemento. No eliminé la pregunta porque algunas de las respuestas tienen voto ascendente e intentaron resolver el problema. –

Cuestiones relacionadas