[英]Using Expression Tree in LINQ to Entity Framework Core
我想从数据库中按我选择的顺序来获取数据,例如,我想让网站上注册的所有用户按以下顺序排序:名称,名称升序,注册日期或评论数。
我不想重复所有的select语句,因为仅按语句排序
那是我的代码,但不适用于我:
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;
}
那就是Select语句:
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();
它工作正常,但当我想按评论订购时出现问题。 计数 &用户名降序 ,问题出在( 计数 & 降序 )
有一个更简单的解决方案,只需使用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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.