2010-11-24 50 views
0

好吧,我有一個大腦塊(如果你願意,感恩節前的陰霾)。我解構了一個整數來發現設置了哪些位(這是根據選定的列表框項目設置的)。所以如果我的整數值是11,那麼位1,2,4被設置。所以我解構了我的位掩碼來獲取設置的位。我可以把它放回整數列表或整數數組中。LINQ在一個類別的列表

這是我的問題。我有一個存儲過程轉到數據庫並返回一個類的列表。這個類是由我構造的,包含整數,字符串,基本上是我在課堂上需要的。該類查找匹配用戶輸入條件的記錄。我添加多選列表框(完成)並生成一個返回設置(完成)的位的整數值的位掩碼。我進行數據庫調用,並根據用戶輸入的條件獲取事務列表。我不想重寫/添加到我的存儲過程,因爲它用於其他地方的金額。我只想應用一些LINQ來搜索與列表中的選擇相匹配的所有記錄。

該列表將返回不同類型的TransactionTypes。我得到了事務類型的行號(14個事務類型,14位,1-14是我所識別的行號)。我做了一個循環來將行號整數添加到整數數組。

for (int i = 0; i <= //countOfSelections is 14; i++) 
{ 
    int num = 0; 
    num = (//int of decimal value constructed & (1 << i)); 
    if (num != 0) 
     bits[i] = num; 
} 

我有一個數據庫調用,使var數據類的列表。無論如何循環使用鏈接並根據選擇在.where子句中應用循環?那麼在類中的RowNumber等於位[]中的行號?

編輯:這是更多的代碼。

我的列表框中有選擇(14種交易)。

當用戶按Ctrl +在他們點擊交易類型和搜索的,我再補充一點選擇爲整數列表的交易類型行號。因此,如果選擇一個二和四個選項,我的列表包含1,2,4。我不希望有14個語句或傳遞14個值,因爲這是硬編碼的。 (如果我添加更多的數據庫表,那麼我必須改變這個地方)。

爲了防止自己不必爲此,我組裝位掩碼,並得到一個整數值(二進制小數)。我這樣做,像這樣:

int total = 0; 
//Building the bit mask 
for (int c = 0; c < optsNum.Count(); ++c) 
{ 
    for (int i = 0; i <= transTypeCount; i++) 
    { 
     if ((i +1) == optsNum[c]) 
      total += (1 << i); 
    } 
} 
return total; 

注意optsNum是我的一個包含用戶選擇的行數的整數列表。此外,transTypeCount是一個整數,它是我列表框中可能選擇的計數。所以再次,如果選項1,2,4被選中。我回到總將等於11

我再路過11的方法,在一些業務邏輯。這種方法還可以接收一些其他用戶選項(基本下拉框等)。

我有一個包含交易信息(包括數量,產品名稱和交易類型(我的行數))的一類。我的數據庫調用返回這個類的列表,它存儲在'var data'中。所以'數據'現在是這些類的列表。

在我的方法我現在有數據,需要根據用戶希望看到(這是我的十進制我從位掩碼做內)所選擇的交易類型進行過濾data.TransactionID。所以我需要解構我的位掩碼來找出哪些位被設置。 **我在上面的代碼中做了這個,並且bits []數組將包含一個整數集。再一次,1,2,4。

我想過濾數據,只有數據中的TransactionIDs包含在我的數組位[]中才能獲取數據。無論如何,我可以使用LINQ來搜索類,只組裝一個類的列表,該類中的事務ID等於我的bits []數組中的事務ID?這將成爲一個循環......就像循環遍歷位[]並選擇where transactionID = bits [i]。我對LINQ相當陌生,這讓我感到困惑。

+0

你能否提供更多的代碼和明確最終的結果是什麼,你正在尋找? – 2010-11-24 16:40:30

+0

是的,我會加我的問題 – Tom 2010-11-24 16:41:31

回答

3

您可以使用連接:

var selectedTransactions = 
     from t in data 
     join transactionId in bits on t.TransactionID equals transactionId 
     select t; 
相關問題