2012-07-25 37 views
0

如何確定當前項目的位置,同時循環收集?如何確定當前項目的位置,同時循環收集?

我通過決策數據,每個客戶端分組的工作,但我有結合依賴於集中的「位置」,即第一,第二,第三等與其他性質的一些業務邏輯記錄,例如如果它是關於一個客戶第三決定及其實例評級是A,那麼...

var multiples = from d in context.Decision_Data 
       group d by d.Client_No 
        into c 
        where c.Count() > 1 
        select c; 

foreach (var grouping in multiples) 
{ 
    foreach (var item in grouping) 
    { 
     // business logic here for processing each decision for a Client_No 
     // BUT depends on item position ... 1st, 2nd, etc. 
    } 

更新:我明白我可以把一個計數器和手動遞增,但感覺錯誤和我以爲有東西在.NET中處理這??

+0

爲什麼不使用'for'-loop而不是'foreach'? – sloth 2012-07-25 09:39:06

+0

[你如何獲得foreach循環當前迭代的索引?](http://stackoverflow.com/questions/43021/how-do-you-get-the-index-of-the- current-iteration-of-a-foreach-loop) – sloth 2012-07-25 09:39:24

+0

@BigYellowCactus由於缺少索引器,'for'循環在IEnumerable上是不可能的。 – 2012-07-25 09:46:11

回答

4

事情是這樣的:

foreach (var grouping in multiples) 
{ 
    foreach (var x in grouping.Select(index,item) => new {index, item}) 
    { 
     // x.index is the position of the item in this group 
     // x.item is the item itself 
    } 
} 

旁註:你可以使您的LINQ查詢的實現更高效一些。無論如何,Count() > 1將完全列舉每個組,您可能會在foreach中做這些。相反,您可以使用Skip(1).Any(),它會在找到兩個項目時立即停止迭代組。顯然,這隻會對(非常)大的輸入列表產生真正的影響。

var multiples = from d in context.Decision_Data 
       group d by d.Client_No 
        into c 
        where c.Skip(1).Any() 
        select c; 
3

沒有通過標準的foreach提供什麼。只需維護一個外部計數。

有上,提供了當前項目的索引Enumerable.Select擴展方法的重載:

http://msdn.microsoft.com/en-us/library/bb534869

但不知道你的代碼試圖在foreach我真的不能提供一個例子做使用它。從理論上講,您可以投射一個匿名類型,索引存儲在foreach之後。看起來jeroenh's answer沿着這條路線走下去了。

0

正如亞當說,你既可以與亞當斯的解決方案去,或者做一個ToList()上查詢到能夠做到

multiples.IndexOf(grouping) 
+0

假設'multiples'是List <>'而不是'IEnumerable <>'。 – 2012-07-25 09:15:16

+0

@AdamHouldsworth是真的,但你可以在查詢 – derape 2012-07-25 09:17:27

+0

上做一個'ToList()'我說這是因爲你的答案沒有,而且這是非常重要的IMO。 – 2012-07-25 09:18:22

0

我看不到您,您可以對您的決定順序有任何確定性。 我猜你的數據來自一個長期的數據源(例如數據庫等),並且你不能控制從數據源獲取決策的順序,特別是在應用「通過...分組」。

我會向Decision實體添加一個「訂單」字段(或列),以跟蹤將決策添加到數據源時將設置的決策順序。 這樣,您可以直接在業務邏輯中使用此字段。

必須有許多方法來實現對決策順序的跟蹤,但是如果沒有,您甚至無法確定它們以何種順序進行。

相關問題