2017-03-08 195 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)) 

你必須通過一些unique財產像Id搜索,以確保你能找到的對象。此外,如果您想使用Contains,則必須實施並覆蓋IComparable接口和方法,或者傳遞自定義比較器。

0

試試這個

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

}