繁体   English   中英

在LINQ中使用表达式树到实体框架核心

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM