2017-03-08 173 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(); 
     } 
    } 

}