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

来源:http://www.cnblogs.com/loda7023link/archive/2016/01/11/5121708.html
-Advertisement-
Play Games

今天項目要求隨機從資料庫中隨機取出若幹條數據,放到首頁。那麼要如何隨機取出這個子集合呢?本人向到的方法如下:1、假設數據量很少,如我資料庫中只有10條數據,而我要求隨機取出8條。對於這種低數據量,大可以一次過全部取出放到父集合當中,然後隨機remove去兩條。 List lis...


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

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排序相當於不用排序。其他情況我也沒很深的理解,網上資料很多,只有自行查閱了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好了,前面所有的都是很簡單的例子,現在開始的是大型重構。對於大型重構來說,情況複雜多變,耗時也會很長,前面的簡單重構大多是在一個小時內可以完成,但是對於大型重構來說可能需要幾個月,甚至數年。如果是一個運行中的系統,重構起來只能每天一點點去慢慢重構。(恕我直言,在國內恐怕這樣的公司也很少。所以我們要自...
  • 描述剛剛使用EF,還沒搞明白,遇到下麵問題,記錄一下。都說EF好用,一直也沒用過,以前寫代碼都是ADO.NET,寫起來費時費力還沒什麼大進展,如果能把這些事簡化一下把精力放到邏輯或者更有用的地方豈不是更好。所以想使用EF。Code First,從字面的意思來看是先有代碼後有資料庫,通過Model來創...
  • 參考學習:第一篇:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html第二篇:http://www.jb51.net/article/50518.htm使用方法: 第一步:先引入jQuery與ajaxFileUpload插....
  • public partial class Form2 : Form { public Form2() { InitializeComponent(); } private Form1 jishiben; ...
  • 目 錄工業物聯網和集成系統解決方案的技術路線... 1前言... 1第一章 系統架構... 31.1 硬體構架圖... 31.2 組件構架圖... 4第二章 技術選型與介紹... 52.1 開發環境... 52.2 數據源... 52.3 數據採集... 52.4 數據上傳服務... 62.5 消息...
  • 在本文中,我們討論OOP中的熱點之一:抽象類。抽象類在各個編程語言中概念是一致的,但是C#稍微有些不一樣。本文中我們會通過代碼來實現抽象類,並一一進行解析。深入理解OOP(一):多態和繼承(初期綁定和編譯時多態)深入理解OOP(二):多態和繼承(繼承)深入理解OOP(三):多態和繼承(動態綁定和運行...
  • 今天系統的來記錄一下再vs2013下,使用ef6 codefirst功能,來操作SQL lite資料庫 本來我以為sqlite資料庫用的這麼多,ef6肯定支持,結果,使用過程中很多坑,現在我把具體的配置過程寫下,希望以後再配置,不會像我一樣,花1天去找解決方法 1.到此鏈接去下載相關的庫 http:...
  • 更新ing
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...