我們知道在sql server中可以利用row_number、rank等函式進行排名,在mysql中可以利用變數方式來實現排名,對於計算操作我傾向於放在記憶體中來操作,而資料庫只是做簡單的操作,儘管各個資料庫可能提供了對應函式來進行處理,但是一旦資料量大時,可能擱置到記憶體中計算不失為一種好的方式。接下來我們來看看在c#中如何利用linq來進行排名,比如我們需要統計截止到當前時間,患者諮詢的醫生的人次排名(同一患者在同一天諮詢同一醫生多次只算一次),假設我們從資料庫查詢出醫生姓名和患者諮詢醫生的次數,如下:
publicclass
consult
public
int times
public
int rank
}
var consults = new list()我們得到了所有醫生被諮詢的次數和姓名,接下來我們通過linq繼續對其進行操作,這裡最重要需要了解的是投影(select或selectmany)具有索引的引數,知道有索引這個引數一切就好辦了,因為次數越大說明排名越靠前,所以首先我們需要對上述集合進行倒序,然後再對倒序後的結果通過次數進行分組,分組後將導致不同次數在不同集合中(反之,同次數在相同集合中),然後通過selectmany獲取到分組後的指定集合和索引,最後對此集合進行投影就得到了最終的結果排名,**如下:,
new consult() ,
new consult() ,
new consult() ,
new consult() ,
new consult()
};
C 黔驢技巧之去重(Distinct)
關於c 中預設的distinct方法在什麼情況下才能去重,這個就不用我再多講,針對集合物件去重預設實現將不再滿足,於是乎我們需要自定義實現來解決這個問題,接下來我們詳細講解幾種常見去重方案,孰好孰歹自行判之。首先給出我們需要用到的物件,如下 public class person public in...
C 之實現MyString類
1.mystring.h pragma once include using namespace std class mystring 2.mystring.cpp include mystring.h 建構函式 mystring mystring const char str else 拷貝建構函...
FCL應用技巧之 實現UDP組播
整個d類位址是不能配置到主機網絡卡上的,它們專門供組播使用。fcl為使用udp提供了兩個類,乙個是基礎的socket,乙個是封裝了socket的udpclient。需要說明的是,組播的特殊性只是在接收方才存在,對於傳送方,直接向組播ip位址傳送即可,與單播無異。傳送程式如下 class progra...