我正在使用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);
上面我正在创建动态排序列,我在下面的查询中应用了这个sortexpression:
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);
我在输入中有2列,我必须对数据进行排序,其中一列是CreatedDate,另一列是Abusecount。我必须在两个列中应用一列排序。但是当我试图运行上面的代码时,我收到了错误:
“无法将类型'System.Nullable`1'强制转换为'System.Object'.LINQ to Entities仅支持转换EDM原语或枚举类型。”
因为在我的数据库中,这两列都是可以为空的类型,因为我遇到了这个问题。有人有解决这个问题的方法吗?我不想改变DB。我只能从前端解决它。 任何帮助都会受到高度关注。
答案 0 :(得分:0)
试试这个,#39;这么简单:
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();