2016-06-14 3 views
0

intではなくstringでIEnumerableの内容にアクセスしようとしています。文字列によるIEnumerable参照のForeach

METHOD

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をすれば - 明らかに - うまくいく。

EDIT

私は@DスタンレーとしてDictionary<string,Foo>アプローチを行って@juharrお勧めしますが、私はまだKeyValuePairにアクセスするために、foreachループを経由して、これらの結果を反復処理する必要があります。私は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オブジェクトを与えるとによってインデックスされます。一致するキーを持つオブジェクトを見つけるためにコレクション全体を反復する必要はありません。もう少し掘りで

+0

これでした!ありがとう! – jellz77

+0

結果はまだintとして格納されていますが、次にKeyValuePair?あなたの例では、 – jellz77

+0

あなたの例では、私はまだforeachの結果を反復処理してforeachで一度アクセスしなければならない – jellz77

0

、私は上記の私の例を使用してC# List of objects, how do I get the sum of a property

を通じて答えを見つけることができた、私はLINQを使用して、次のロジックを実装するには:

METHOD

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; 
} 

閲覧

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

私の見解では、foreach内のforeachを緩和する変数を "jon"に置き換えています。すべての混乱のために申し訳ありませんが、誰もが助けてくれてありがとう!

関連する問題