【发布时间】:2021-12-18 02:41:36
【问题描述】:
我正在使用 Entity Framework 6 和 SQL Server 数据库开发 ASP.NET MVC 应用程序。
我试图通过添加一个SortingCode 来打乱查询的结果,我想根据当前的SessionId 分配一个值,这样每次返回的行都会被打乱而不影响分页. SortingCode 在此尝试中是一个字符串,但它可以是任何类型,只要它允许我得到混洗结果。我有这样的事情:
var sessionId = Session.SessionID.GetHashCode();
var rnd = new Random(sessionId);
var query = (from l in _context.Adverts
select new AdvertSummary
{
Id = l.Id,
Title = l.Title,
Description = l.Description,
SortingCode = l.Title.OrderBy(x => rnd.Next()).ToString(),
});
IQueryable 结果随后在我的代码中转换为列表:
var pagedResults = query.Skip(skip).Take(pageSize).ToList();
上述Random 类的尝试不起作用,并导致错误
DbExpressionBinding 需要一个带有集合 ResultType 的输入表达式
我可以做些什么来获得洗牌的结果?
【问题讨论】:
-
什么是
_repository.MyTable()?l.Title.OrderBy(x => rnd.Next()).ToString()应该产生什么? -
EF?哪个版本?
-
非常感谢您的关注。我已经更新了帖子,希望现在更清楚了。
-
有sort randomly的解决方案,但我也不明白你为什么要对
Title的字符进行排序。 -
@SvyatoslavDanyliv 您链接的帖子中的解决方案使用
something.OrderBy(r => Guid.NewGuid()).Take(5)。 Guid.NewGuid() 在分页中不起作用,因为每次更改页面时都会重新创建顺序。我需要在滚动页面时保持相同的顺序。这就是为什么我需要基于 SessionID 进行排序。
标签: asp.net-mvc linq pagination shuffle