Linq加入后返回随机实体

时间:2014-05-27 19:12:32

标签: c# sql linq entity-framework random

我正试图从我写的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);

2 个答案:

答案 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 row from Linq to Sql

您可以创建一个空的Random方法,LINQ将转换为对SQL的Random T_SQL调用。