Ich möchte Daten von der Datenbank erhalten, die durch etwas bestellt sind, das ich es wähle, als Beispiel möchte ich, dass alle Benutzer in der Website registriert werden, sortiert nach: Name, aufsteigender Name, Registrierungsdatum oder Anzahl der Kommentare.
Ich möchte nicht alle Select- Anweisungen wiederholen , weil nur nach Anweisung sortiert ist
das ist mein Code, aber es funktioniert nicht mit mir:
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 ist Select-Anweisung:
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 Kommentaren bestellen möchte. Count & UserName absteigend , das Problem ist in ( Count & absteigend )
Es gibt eine viel einfachere Lösung dafür, verwenden Sie einfach die fließende Oberfläche 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();