2016-06-14 56 views
0

我想通過字符串而不是int來訪問IEnumerable的內容。foreach按字符串的IEnumerable引用

方法

public List<Foo> GetFoo(IEnumerable<Bar> bar) 
{ 
    List<Foo> foo = new List<Foo>(); 

    var query = from x in bar  
       select new Foo() 
       { 
        foo = x.foo, 
        bar = x.bar 
       }; 
    foo = query.ToList(); 
    return foo; 
} 

VIEW

<td>@foo["bar"].foo<td> 

我知道上面不存在,但是這就是我要找的事情。如果我做foo[0].foo它 - 顯然 - 起作用。

編輯

我去與Dictionary<string,Foo>方式作爲@D士丹利和@juharr建議,但我仍然有經由foreach循環這些結果以訪問KeyValuePair進行迭代。我試圖繞過一個foreach並通過Key訪問結果。這可能嗎?

public Dictionary<string,Foo> GetFoo(IEnumerable<Bar> bar) 
{ 
    var query = from x in bar    
       select new Foo() 
       { 
        foo = x.foo, 
        bar = x.bar 
       }; 
    return query.ToDictionary(f=>f.foo,f=>f);    
} 
+2

您對此有何看法?序列中的哪個元素應該返回foo [「bar」]? – Lee

+0

我目前正在foreach中運行一個foreach,並說'if item.foo == item2.foo then ....'。我試圖通過運行1個foreach並通過item.foo訪問另一個IEnumerable來繞過這個邏輯。有道理? – jellz77

+0

你可以添加「foreach」嗎? – Lee

回答

1

沒有什麼與List結構緊湊。它只有一個接受整數的索引器(你想要的項目的索引)。有幾個選項:

  • 亞型List<Foo>添加接受字符串
  • 使用字典而不是List<Foo>一個索引:

    public Dictionary<string,Foo> GetFoo(IEnumerable<Bar> bar) 
    { 
        var query = from x in bar  
           select new Foo() 
           { 
            x.foo, 
            x.bar 
           }; 
    
        return query.ToDictionary(f => f.bar, f => f)); 
    } 
    

然後foo["bar"]會給該Foo對象索引"bar"。您不需要遍歷整個集合以查找具有匹配鍵的對象。

+0

這樣做了!謝謝! – jellz77

+0

結果仍然作爲整數存儲,那麼KeyValuePair? – jellz77

+0

在你的例子中,我仍然需要遍歷foreach中的結果,然後在foreach中訪問該密鑰 – jellz77

0

隨着多一點挖,我是能夠找到通過C# List of objects, how do I get the sum of a property

答案用我上面的例子中,我使用LINQ實現以下邏輯:

方法

public List<Foo> GetFoo(IEnumerable<Bar> bar) 
{ 
    List<Foo> foo = new List<Foo>(); 

    var query = from x in bar  
       select new Foo() 
       { 
        name= x.name, 
        amount = x.amount 
       }; 
    foo = query.ToList(); 
    return foo; 
} 

VIEW

@double total = foo.Where(item => item.name == "jon").Sum(item => item.amount);  
<td>@total<td> 

在我看來,我會用一個變量替換「jon」來緩解foreach內的foreach。對不起,所有的困惑,但感謝大家的幫助!