score:3

Accepted answer

judging from your sql query, i think this is what you want:

var lotterynumbers = new int[] { ... };
var results =
    from j in jogos
    where lotterynumbers.contains(j.n1) &&
          lotterynumbers.contains(j.n2) &&
          lotterynumbers.contains(j.n3) &&
          lotterynumbers.contains(j.n4) &&
          lotterynumbers.contains(j.n5) &&
          lotterynumbers.contains(j.n6) &&
          lotterynumbers.contains(j.n7) &&
          lotterynumbers.contains(j.n8) &&
          lotterynumbers.contains(j.n9) &&
          lotterynumbers.contains(j.n10) &&
          lotterynumbers.contains(j.n11) &&
          lotterynumbers.contains(j.n12) &&
          lotterynumbers.contains(j.n13) &&
          lotterynumbers.contains(j.n14) &&
          lotterynumbers.contains(j.n15)
    select j;

or in fluent syntax

var results =
    jogos.where(j =>
          lotterynumbers.contains(j.n1) &&
          lotterynumbers.contains(j.n2) &&
          lotterynumbers.contains(j.n3) &&
          lotterynumbers.contains(j.n4) &&
          lotterynumbers.contains(j.n5) &&
          lotterynumbers.contains(j.n6) &&
          lotterynumbers.contains(j.n7) &&
          lotterynumbers.contains(j.n8) &&
          lotterynumbers.contains(j.n9) &&
          lotterynumbers.contains(j.n10) &&
          lotterynumbers.contains(j.n11) &&
          lotterynumbers.contains(j.n12) &&
          lotterynumbers.contains(j.n13) &&
          lotterynumbers.contains(j.n14) &&
          lotterynumbers.contains(j.n15));

although this assumes you don't have duplicates in either lotterynumbers or in j.n1 .. j.n15. otherwise you'd probably get unexpected results.

score:32

two ways to solve your problem.

represent a winning combination as a set of fifteen integers:

hashset<int>

you have a sequence of winning games:

ienumerable<hashset<int>>

and a specific hashset<int>. you wish to know if the specific set exactly matches any of the winning sets.

method one

static bool didiwin(ienumerable<hashset<int>> winningnumbers, hashset<int> mynumbers)
{
    return winningnumbers
      .where(winningnumber => mynumbers.setequals(winningnumber))
      .any();
}

or even

static bool didiwin(ienumerable<hashset<int>> winningnumbers, hashset<int> mynumbers)
{
    return winningnumbers
      .any(winningnumber => mynumbers.setequals(winningnumber));
}

method two

static bool didiwin(ienumerable<hashset<int>> winningnumbers, hashset<int> mynumbers)
{
    return false;
}

method two is a lot faster. however, it gives the incorrect result on average one time out of every three million winning numbers. this demonstrates that sometimes you can get a big performance win by being willing to accept a tiny amount of inaccuracy.

:-)


Related Query