我创建了一个方法,我从ma数据库中取一个随机行并将其放入新的List中,如果再次使用该方法,它将检查之前是否选择了随机行并选择了另一行,如无需重复绘制。程序编译,但不工作。谁能告诉我我做错了什么?
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;
}
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:0)
if (AlreadyChosen.Any(a=>a.SomeUniqueProperty == dane.SomeUniqueProperty))
您必须搜索某些unique
属性,例如Id
,以确保您可以找到该对象。此外,如果您想使用Contains
,则必须实现并覆盖IComparable
接口和方法,或者传递自定义比较器。