2017-03-08 3 views
-1

maデータベースからランダムな行を取得して新しいリストに入れるメソッドを作成しました。メソッドが再度使用されると、以前にランダムな行が選択されていて、別のものが選択されているかどうかがチェックされます繰り返しなしの描画のように。プログラムはコンパイルされますが、動作しません。誰かが私が間違っていることを教えてもらえますか?リストに存在するか確認する

TABUEntities baza = new TABUEntities(); 
IList AlreadyChosen = new List<IList>(); 


public List<HASLA> RandomWords() 
     { 

      List<HASLA> dane = baza.HASLA.OrderBy(x => Guid.NewGuid()).Take(1).ToList(); 


      if (AlreadyChosen.Contains(dane)) 
      { 
       RandomWords(); 
      } 
      AlreadyChosen.Add(dane); 

      return dane;  
     } 
+3

詳細については、「動作しない」部分について説明してください。 – dasblinkenlight

+2

*プログラムはコンパイルされますが、動作しません。あなたはあなたの問題についてより具体的にする必要があります。 –

+0

'AlreadyChosen'はちょうど作成した' List'をどのように含んでいますか? – UnholySheep

答えて

0
if (AlreadyChosen.Any(a=>a.SomeUniqueProperty == dane.SomeUniqueProperty)) 

を試してみてください。また、Containsを使用する場合は、IComparableのインターフェイスとメソッドを実装してオーバーライドするか、カスタムの比較関数を渡す必要があります。

0

あなたがオブジェクトを見つけることができることを確認するIdのようないくつかのuniqueプロパティで検索する必要があり、この

TABUEntities baza = new TABUEntities(); 
List<HASLA> AlreadyChosen = new List<HASLA>(); 
public List<HASLA> RandomWords() 
{ 



    List<HASLA> rw = new List<HASLA>(); 
    rw.addRange(AlreadyChosen); 

    HASLA selectedObj = baza.HASLA.Where(y => !AlreadyChosen.Contains(y)).OrderBy(x => Guid.NewGuid()).Take(1).FirstOrDefault(); 

    if ((selectedObj == null)) { 
     return rw; 
    } else { 
     if (AlreadyChosen.Contains(selectedObj)) { 
      return RandomWords(); 
     } else { 
      AlreadyChosen.add(selectedObj); 
      return RandomWords(); 
     } 
    } 

} 
関連する問題