2017-12-17 6 views
0

Ich möchte Daten aus der Datenbank nach etwas sortiert, dass ich es wählen, als Beispiel, ich möchte alle Benutzer in der Website registriert bestellen von: Name, Name aufsteigend, registrieren Datum oder Anzahl der KommentareVerwenden von Ausdrucksbaum in LINQ zu Entity Framework Core

Ich möchte nicht, weil alle wählen Anweisung wiederholen nur Auftrag von Anweisung

, dass mein Code, aber es mit mir nicht:

Expression<Func<AppUser, Object>> OrderByExpression = null; 

switch (userOrder) 
{ 
    case UserOrder.RegistDate: 
     OrderByExpression = a => a.RegistrationDate; 
     break; 
    case UserOrder.A_Z: 
     OrderByExpression = a => a.UserName; 
     break; 
    case UserOrder.Z_A: 
     OrderByExpression = a => a.UserName descending; 
     break; 
    case UserOrder.MostComment: 
     OrderByExpression = a => a.Comments.Count; 
     break; 
} 

Das Select-Anweisung lautet:

IEnumerable<AppUser> AllUsers = 
    (from a in context.Users 
    orderby OrderByExpression.Compile()(a) 
    select new AppUser 
    { 
     UserName = a.UserName, 
     Id = a.Id, 
     Email = a.Email, 
     EmailConfirmed = a.EmailConfirmed, 
     RegistrationDate = a.RegistrationDate 

    }).ToList(); 

Es funktioniert gut, aber das Problem, wenn ich nach Kommentar bestellen möchte s. Graf & Username absteigend, ist das Problem in (Count & absteigend)

Antwort

1

Es gibt eine viel einfachere Lösung dieses Problems, sondern nur die fließend Schnittstelle von LINQ:

var query = context.Users.AsQueryable(); 

switch (userOrder) 
{ 
    case UserOrder.RegistDate: 
     query = query.Orderby(a => a.RegistrationDate); 
     break; 
    case UserOrder.A_Z: 
     query = query.Orderby(a => a.UserName); 
     break; 
    case UserOrder.Z_A: 
     query = query.OrderbyDescending(a => a.UserName); 
     break; 
    case UserOrder.MostComment: 
     query = query.Orderby(a => a.Comments.Count); 
     break; 
} 

IEnumerable<AppUser> results = query 
    .Select(a => new AppUser 
    { 
     UserName = a.UserName, 
     Id = a.Id, 
     Email = a.Email, 
     EmailConfirmed = a.EmailConfirmed, 
     RegistrationDate = a.RegistrationDate 
    }) 
    .ToList(); 
+0

Danke , aber ich muss nur var query = context.Users.AsQueryable() anstelle von var query = context.Users verwenden – mustafa

+1

@mustafa Ich habe vergessen, dass 'AsQueryable' benötigt wurde (hängt von der EF-Version ab), behoben! –

Verwandte Themen