2010-11-23 12 views
0

Je n'ai pas beaucoup utilisé LINQ, mais plus je l'utilise, plus je réalise à quel point il peut être puissant. L'utilisation de la clause LinqDataSource.OrderBy est évidemment facile si vous souhaitez trier à partir d'une propriété sur les éléments liés mais que faire si vous souhaitez trier les éléments en fonction d'un retour de méthode? Prenez cette classe, par exemple, (s'il vous plaît ignorer la conception bizarre - il est juste utilisé pour souligner mon point):Est-il possible de définir LinqDataSource.OrderBy sur le résultat d'une méthode?

public class DataItem 
{ 
    private string Id { get; set; } 

    private int SortValue { get; set; } 

    public DataItem(string id, int sortValue) 
    { 
     this.Id = id; 
     this.SortValue = sortValue; 
    } 

    public int GetSortValue() 
    { 
     return SortValue; 
    } 
} 

Est-il possible que je peux définir l'expression orderby sur la LinqDataSource pour qu'il utilise la valeur retournée par GetSortValue (c.-à-d. Ordre par d'autres membres que les propriétés) mais sans modifier la classe DataItem?

Répondre

1

Si la méthode n'a pas de paramètres, vous pouvez l'inclure dans une propriété? Edit: Cela fonctionnera également si les paramètres sont des constantes ou des champs/propriétés de classe.

+0

Salut Jackson, En effet, je pourrais envelopper la méthode dans une propriété - malheureusement (et je devrais probablement avoir mentionné cela auparavant) Je ne peux pas modifier la classe DataItem. Je me demandais s'il y avait un moyen de définir la propriété d'ordre sans changer la classe Dataitem –

+0

Pas que je puisse voir j'ai peur. –

0

Le MSDN docs mentionne qu'il est en effet possible de faire un tri personnalisé mais j'ai peut-être mal interprété votre question.

+1

Vous avez lié la référence pour 'IEnumerable .OrderBy()' (LINQ), même si OP parle de 'System.Web.UI.WebControls.LinqDataSource' – abatishchev