Например, следующий составной запрос + метод выглядит недостаточно хорошо. Я ищу лучший подход.

        foreach (var x in A)
        {
            foreach (var y in B)
            {

                if (getLazyList(x, y).Any(z => z == y))
                {
                    blacklist.Add(x);
                    break;
                }

            }
        }

Теперь по сравнению с этим, предоставленным: @Bob Vale

 var q = from x in A 
         from y in B
         where getLazyList(x,y).Contains(y)
         select x;
 blacklist.AddRange(q);

Будет ли второй метод делать ненужные циклы? в 1-м примере я использую .any () и break, чтобы выйти из внутреннего цикла, как linq справится с этим во 2-м случае?

1
colinfang 26 Авг 2011 в 03:49

3 ответа

Лучший ответ

Как насчет этого;

var q = from x in A 
        from y in B
        where getLazyList(x,y).Contains(y)
        select x;
blacklist.AddRange(q);

Если AddRange не работает, просто замените последнюю строку на

foreach (var x in q) blacklist.Add(x);

Чтобы справиться с перерывом, вам нужно будет использовать предложение any

var q = from x in A
       where B.Any(y=>getLazyList(x,y).Contains(y))
       select x
1
Bob Vale 26 Авг 2011 в 08:28

Вот немного другая реализация ваших циклов LINQ:

blacklist.AddRange(A.Where(x => B.Any(y => getLazyList(x, y).Any(z => z == y))));

2
Daniel Mann 26 Авг 2011 в 01:58