Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ到实体框架核心中使用表达式树_C#_Linq_Entity Framework Core - Fatal编程技术网

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

C# 在LINQ到实体框架核心中使用表达式树,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,我想从数据库中获取数据,按我选择的对象排序, 例如,我想让所有用户在网站上注册,订购人: 姓名、姓名升序、注册日期或评论数 我不想重复所有select语句,因为只有orderby语句 这是我的代码,但不适用于我: Expression<Func<AppUser, Object>> OrderByExpression = null; switch (userOrder) { case UserOrder.RegistDate: OrderByExp

我想从数据库中获取数据,按我选择的对象排序, 例如,我想让所有用户在网站上注册,订购人: 姓名、姓名升序、注册日期或评论数

我不想重复所有select语句,因为只有orderby语句

这是我的代码,但不适用于我:

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;
}
Expression OrderByExpression=null;
开关(用户顺序)
{
案例UserOrder.RegistDate:
OrderByExpression=a=>a.RegistrationDate;
打破
案例UserOrder.A_Z:
OrderByExpression=a=>a.UserName;
打破
案例UserOrder.Z_A:
OrderByExpression=a=>a.UserName;
打破
case UserOrder.most建议:
OrderByExpression=a=>a.Comments.Count;
打破
}
这就是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();
IEnumerable诱惑者=
(从上下文中的
orderby OrderByExpression.Compile()(a)
选择新应用程序用户
{
UserName=a.UserName,
Id=a.Id,
电子邮件,
emailconfirm=a.emailconfirm,
注册日期=a.注册日期
}).ToList();

它工作正常,但当我想按评论排序时会出现问题。Count&UserNamedownsing,问题在于(Count&downsing

有一个更简单的解决方案,只需使用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();
var query=context.Users.AsQueryable();
开关(用户顺序)
{
案例UserOrder.RegistDate:
query=query.Orderby(a=>a.RegistrationDate);
打破
案例UserOrder.A_Z:
query=query.Orderby(a=>a.UserName);
打破
案例UserOrder.Z_A:
query=query.OrderbyDescending(a=>a.UserName);
打破
case UserOrder.most建议:
query=query.Orderby(a=>a.Comments.Count);
打破
}
IEnumerable results=查询
.选择(a=>new AppUser
{
UserName=a.UserName,
Id=a.Id,
电子邮件,
emailconfirm=a.emailconfirm,
注册日期=a.注册日期
})
.ToList();

谢谢,但我只需要使用var query=context.Users.AsQueryable()而不是var query=context。Users@mustafa我忘了需要
AsQueryable
(取决于EF版本),已修复!