检查列表中是否存在

时间:2017-03-08 15:35:17

标签: c#

我创建了一个方法,我从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;      
        }

2 个答案:

答案 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接口和方法,或者传递自定义比较器。