【问题标题】:Dynamic sorting with nullable column可空列的动态排序
【发布时间】:2014-06-06 07:59:54
【问题描述】:

我正在用 lambda 表达式编写动态排序,如下所示:

string sortColumn = imageFilterType == 1 ? "CreatedDate" : "AbuseCount";
var paramExp = Expression.Parameter(typeof(Items), typeof(Items).ToString());
Expression propConvExp = Expression.Convert(Expression.Property(paramExp, sortColumn), typeof(object));
var sortExp = Expression.Lambda<Func<Items, object>>(propConvExp, paramExp);

上面我正在创建动态排序列,并在下面的查询中应用这个排序表达式:

var items = _db.Items.AsQueryable()
                     .AsExpandable()
                     .OrderByDescending(sortExp)
                     .Where(predicate)
                     .Select(x => x)
                     .Join(_db.Users, i => i.UserId, u => u.UserID, (i, u) => new
                        {
                            i,
                            FullName = u.UserType == 1 ? u.FirstName + " " + u.LastName : u.CompanyName,
                            u.UserType,
                            u.UserName
                        })
                    .ToList()
                    .Skip(pageIndex)
                    .Take(pageSize);

我有两列输入,我必须对数据进行排序,一列是 CreatedDate,另一列是 Abusecount。我必须对它们中的一列进行排序。但是当我试图运行上面的代码时,我收到了错误:

“无法将类型 'System.Nullable`1' 转换为类型 'System.Object'。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。”

因为在我的数据库中,这两个列都是可以为空的类型,所以我遇到了这个问题。有没有人有这个问题的解决方案?我不想改变数据库。我只能从前端解决它。

【问题讨论】:

    标签: linq sorting dynamic


    【解决方案1】:

    试试这个,它更简单:

    var items = _db.Items.AsQueryable()
                     .AsExpandable();
    if (imageFilterType == 1)
       items=items.OrderByDescending(a=>a.CreatedDate);
    else
       items=items.OrderByDescending(a=>a.AbuseCount);
    
    items=items.Where(predicate)
                     .Select(x => x)
                     .Join(_db.Users, i => i.UserId, u => u.UserID, (i, u) => new
                        {
                            i,
                            FullName = u.UserType == 1 ? u.FirstName + " " + u.LastName : u.CompanyName,
                            u.UserType,
                            u.UserName
                        })
                     .Skip(pageIndex)
                     .Take(pageSize)
                     .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 2018-08-09
      • 1970-01-01
      • 2013-07-12
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多