【发布时间】: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 基元或枚举类型。”
因为在我的数据库中,这两个列都是可以为空的类型,所以我遇到了这个问题。有没有人有这个问题的解决方案?我不想改变数据库。我只能从前端解决它。
【问题讨论】: