我正试图从我写的i join查询中返回随机实体。但它不会随机返回。实体之前总是一样的。可能是什么问题?这是查询
var query = (from b in db.BrandTbls.AsQueryable()
join m in db.ShoeModelTbls on b.BrandID equals m.BrandID
join s in db.ShoeTbls on m.ModelID equals s.ModelID
join i in db.ShoeImageTbls on s.ShoeID equals i.ShoeID
group new {b,m,s,i} by new {b.BrandName,m.ModelName,m.Price,s.PrimaryColor,s.SecondaryColor,i.ImagePath} into g
orderby Guid.NewGuid()
select new {g.Key.BrandName,g.Key.ModelName,g.Key.ImagePath,g.Key.Price,g.Key.PrimaryColor,g.Key.SecondaryColor}).OrderBy(x => Guid.NewGuid()).Take(8);
答案 0 :(得分:2)
GUIDs are not random numbers. They are unique numbers。有许多方法可以生成唯一值,其中许多都不是随机的。生成的GUID值甚至可能单调递增,这意味着对序列中每个项目的新guid进行排序将导致每个项目保持完全相同的顺序。
Shuffling a set of data is a well defined problem, with well defined solutions.你应该使用一个记录良好的解决方案来解决混乱问题,以便可靠,高效地改组数据集。
答案 1 :(得分:1)
orderby Guid.NewGuid()
类似于orderby 1.它不会导致随机返回。
我建议让SQL做随机化操作。看一下这个例子:
您可以创建一个空的Random方法,LINQ将转换为对SQL的Random T_SQL调用。