【发布时间】:2015-08-25 11:30:29
【问题描述】:
我试图在每个请求的视图中显示随机产品,thisOrderBy(r => Guid.NewGuid()) 工作正常,但是当表记录很大时我试图提高性能,所以我使用了来自here 的第二个选项
我的行动:
public ActionResult ProductType(string id)
{
List<ProductsView> productlist = (from a in this.dbo.ProductTable
join ca in dbo.Category on a.CategoryID equals ca.CategoryID
where ca.Category == id
select new ProductsView()
{
CategoryID = c.CategoryID,
Categorycount = c.Categorycount
}).ToList<ProductsView>();
// here shuffle or mix products
int count = productlist.Count();
int index = new Random().Next(count);
ViewBag.Products = productlist.Skip(index).ToList();
return View();
}
但是当视图返回时,一些记录丢失了,例如:
第一次请求 数 4 索引 1
在视图中显示 3 个产品
第二次请求 数 4 索引 2
在视图中显示 2 个产品
第三次请求 数 4 索引 3
在视图中显示 1 个产品
最后我还有一个要求,我可以在顶部显示最后插入的行并让其他产品随机吗?
我可以知道我错过了什么吗?
任何帮助都会很棒。
【问题讨论】:
-
嗯,它完全按照您的要求做:它跳过了随机数量的行。您的要求在这里真的很不清楚-您所说的“随机产品”到底是什么意思?如果总共有四个产品,您要展示多少个?
-
@Jon Skeet,实际上我想显示 4 个产品,但每个请求的顺序是随机的
-
对,这根本不是您的代码所说的,是吗?随机 ordering 与完全跳过元素完全不同。您是否总是想展示所有产品?如果有数千个呢?
-
@Jon Skeet,是的,你是对的,但是能做些什么呢?现在我们计划展示所有产品
-
好的,那么你所说的“最后插入的行在顶部”是什么意思 - 你想要多少不是随机的?只有一个?最后一天的一切?听起来您确实需要在开始实施之前非常仔细地考虑您的需求。
标签: linq entity-framework random linq-to-sql shuffle