簡體   English   中英

Linq加入后返回隨機實體

[英]Linq Returning random entities after join

我試圖從我寫的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);

GUID不是隨機數。 它們是唯一的數字 有許多方法可以生成唯一值,其中許多都不是隨機的。 生成的GUID值甚至可能單調遞增,這意味着對序列中每個項目的新guid進行排序將導致每個項目保持完全相同的順序。

對一組數據進行混洗是一個明確定義的問題,具有明確定義的解決方案。 您應該使用一個記錄良好的解決方案來解決混亂問題,從而可靠,高效地混合數據集合。

orderby Guid.NewGuid()類似於orderby 1.它不會導致隨機返回。

我建議讓SQL做隨機化行為。 看一下這個例子:

從Linq到Sql的隨機行

您可以創建一個空的Random方法,LINQ將轉換為對SQL的Random T_SQL調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM