程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 如何從List集合當中取出子集合,

C# 如何從List集合當中取出子集合,

編輯:C#入門知識

C# 如何從List集合當中取出子集合,


今天項目要求隨機從數據庫中隨機取出若干條數據,放到首頁。那麼要如何隨機取出這個子集合呢?本人向到的方法如下:

1、假設數據量很少,如我數據庫中只有10條數據,而我要求隨機取出8條。對於這種低數據量,大可以一次過全部取出放到父集合當中,然後隨機remove去兩條。

            List<Model> list = new  MyService().QueryList().ToList();
            Random random=new Random();   //注意,不能在while裡面創建random因子,因為這樣會導致隨機因子失效。
            while(list.Count()>8)
            {
                int index=random.Next(list.Count());
                list.RemoveAt(index);
            }        

 

2、假設數據量適中,我測試的表格數據量是387332條數據,id是uniqueidentifier類型,共取出8條數據,一共用了3秒時間。(如果id是int的自增類型,會更快)。

            Random random = new Random();
            StringBuilder sb = new StringBuilder();

            sb.Append("select * from (select ROW_NUMBER()Over(ORDER BY 某一字段) as 'x',* from tablename) as a where ");
            //假設你要從中取8條數據
            int total = new MyService().QueryCount();  //假設這個是表格數據的總條數
            int count = total / 8;
            for (int i = 0; i < 8; i++)
            {
                if (i == 7)
                {
                    //最後一次
                    sb.Append(" a.x=" + random.Next(count * i, total).ToString());
                }
                else
                {
                    //不是最後一次
                    sb.Append(" a.x=" + random.Next(count * i, count * (i + 1)).ToString()+" or"); 
                }
            }
            string sql = sb.ToString();
            //最後得出了sql語句,現在就可以查出 以count為間隔 的隨機集合。

 

 

3、如果數據量很巨大,得到百萬千萬級的,那麼就需要數據庫本身的索引來處理了,最常見的便是自增型的id,因為以這個id來order排序相當於不用排序。其他情況我也沒很深的理解,網上資料很多,只有自行查閱了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved