2012-05-10 14 views
0

リスト(List<b>)を含むリスト(List<a>)があります。 b型リストに文字列フィールドがあります。私はリストを検索することによって、リストb内の一致する文字列のインデックスを探したい。どうやってやるの?Cのリスト一覧で検索

public class b 
{ 
    string Word; 
    bool Flag; 
} 

public class a 
{ 
    List<b> BList = new List<b>(); 
    int Counter; 
} 

リスト "b"の文字列 "Word"に一致するインデックスを探したいとします。

答えて

2

このLINQの式はBList、適切findedインデックスのリストを返す:

 var Result = AList.Select(p => new 
     { 
      BList = p.BList, 
      indexes = p.BList.Select((q, i) => new 
      { 
       index = i, 
       isMatch = q.Word == "Word" 
      } 
      ) 
      .Where(q => q.isMatch) 
      .Select(q=>q.index) 
     }); 
+0

私は非常に良い方法だと思いますが、コンパイラはエラーを返します。エラー匿名型メンバー宣言子が無効です。匿名型メンバーは、メンバー割り当て、単純な名前またはメンバーアクセスで宣言する必要があります。 – sanchop22

+0

FindIndexは、最初のインデックスのみを返します。 –

+0

私は会員に名前を忘れて、コードが更新されました。 –

1

は何が必要ということですか?

var alist = GetListA(); 

var indexes = alist.Select((ix, a) => 
          a.BList.SelectMany((jx, b) => 
               new {AIx = ix, BIx = jx, b.Word})) 
        .Where(x => x.Word == pattern) 
        .Select(x => new {x.AIx, x.BIx}); 
0

私は、これはあなたが出力として望むものに依存推測する - これはあなたのような投影与える:

indexes[0] { A = A[0], Indexes = {1,5,6,7} } 
indexes[1] { A = A[1], Indexes = {4,5,8} } 
... 

var indexes = listA 
    .Select(a => new 
    { 
     A = a, 
     Indexes = a.BList 
      .Select((b, idx) => b == wordToCheck ? idx : -1) 
      .Where(i => i > -1) 
    }); 
0

これはあなたのすべてのオブジェクトの魔女があなたの「言葉」を満たしています:

from a in aList from b in a.bList where b.word.Equals("word") select b;