2011-11-04 14 views
6

decir que tengo 3 nombres de los clientes:LINQ - Ordenar por StartsWith contiene entonces

Microsoft 
Another customer also called Microsoft 
A third customer called Microsoft 

Ahora bien, si i consultar los clientes como éste ...

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name ascending 
        select cust) 

... me sale el siguiente orden:

A third customer called Microsoft 
Another customer also called Microsoft 
Microsoft 

Lo que quiero es obtener Microsoft primero, basado en el hecho de que comienza con "Microsoft".

Cambio Contiene a StartsWith por supuesto me deja con 1 resultado en lugar de 3.

Podría hacerse esto en una sola consulta?

+0

No lo creo, casi tiene que usar consultas de texto completo con ponderación. – Sam

+0

@Sam - Abandoné la búsqueda de texto completo. Me dio un dolor de cabeza al usar espacios en blanco en la búsqueda. – Malako

Respuesta

14

Tal

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name.IndexOf("Microsoft"), 
          cust.Name.Length ascending 
        select cust) 
+0

¡Guau, eso fue rápido! ¡Elegante! – Malako

+0

Esta es una muy buena solución para su problema. –

3

se podía pedir por el porcentaje del partido.

orderby "Microsoft".Length * 1.0/cust.Name.Length 

Esto produciría 100% por sólo Microsoft y mucho menos para los demás partidos.

+0

aMicrosoft obtiene el mismo peso que MicrosoftB con dicho enfoque –

+0

Solución interesante. Sin embargo, es necesario agregar descendente. ¡Pulgares hacia arriba! – Malako

+0

@Valentine - Eso es correcto. Me quedaré con tu solución. – Malako

Cuestiones relacionadas