检查列表中是否存在
问题描述:
我创建了一个方法,其中我从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;
}
答
if (AlreadyChosen.Any(a=>a.SomeUniqueProperty == dane.SomeUniqueProperty))
你必须通过一些unique
财产像Id
搜索,以确保你能找到的对象。此外,如果您想使用Contains
,则必须实施并覆盖IComparable
接口和方法,或者传递自定义比较器。
答
试试这个
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();
}
}
}
请详细解释“不工作”部分。 – dasblinkenlight
*程序编译,但不工作*你是什么意思,不完全工作?你需要更具体地了解你的问题。 –
'AlreadyChosen'应该如何包含刚创建的'List'? – UnholySheep