LINQ to SQL - méthode OrderBy générique

leati24 Messages postés 9 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 27 juillet 2009 - 27 juil. 2009 à 16:58
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 27 juil. 2009 à 21:27
Bonjour,

Je souhaite mettre en place la pagination dans un gridView qui est construit à partir d'un objectDataSource.

Pour cela, je passe un paramètre à ma méthode Select (grâce à la propriété SortParameterName de l'objectDataSource) qui correspond aux différents champs de ma base de données. Une fois dans ma méthode de sélection, je souhaiterais pouvoir écrire une requête avec LINQ to SQL avec un orderBy. Mon problème est que le champ à trier (sortExpression dans ma méthode) est contenu dans un string.

public List<TableA> getListeTableA(string sortExpression)
{
...
var query = (from a in db.TableA
orderby sortExpression ascending
select a);
...
}


Lorsque j'exécute ceci il n'arrive pas à me faire mon orderBy et je comprends bien pourquoi. Il faudrait que je puisse relier sortExpression avec ma variable 'a' mais je n'ai pas d'idées...

2 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
27 juil. 2009 à 21:27
Bonjour,
Voici un exemple:

List<string> ss = new List<string>(3)
{
    "test",
    "tut",
    "xxxx"
};

var query = (from s in ss
             orderby s.Length ascending
             select s);



[hr]
-Blog-
-Site Perso-
1
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
27 juil. 2009 à 21:27
Salut,

Méthode 1 :
Utiliser la classe Dynamic de microsoft.
Disponible ici

        IQueryable<Order> q;
        private void button1_Click(object sender, EventArgs e)
        {
        
            var db = new ContextDataContext();
             q = from c in db.Orders
                    orderby c.CustomerID
                    select c;

            dataGridView1.DataSource = q.ToList();
        }

        private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            var fieldName = dataGridView1.Columns[e.ColumnIndex].HeaderText;
            RefreshData( q.OrderBy(fieldName));
        }

        private void RefreshData(IQueryable<Order> source)
        {
            dataGridView1.DataSource = source.ToList();
        }



Deuxieme methode utiliser les expressions.
cf video

Bon linq
0
Rejoignez-nous