Помощь Linq необходимо преобразовать в модель объектов Linq из модели sql - PullRequest
1 голос
/ 14 марта 2012

У меня есть следующий Linq,

from x in Enumerable.Range(refx - 1, 3)
from y in Enumerable.Range(refy - 1, 3)
where
  (x >= 0 && y >= 0) &&
  (x < array.GetLength(0) && y < array.GetLength(1)) &&
  !(x == refx && y == refy)
select new Location(x,y)

Я хотел бы иметь то же самое в другом формате Linq

что-то вроде,

Enumerable.Range(refx-1,3)
.Select(x)
.Range(refy - 1, 3)
.Select(y)
.Where(x >= 0 && y >= 0) &&
      (x < array.GetLength(0) && y < array.GetLength(1)) &&
      !(x == refx && y == refy)
.Select new Location(x,y)

Я знаю, что вышеприведенное неверно, но я бы хотел, чтобы первое во втором формате, любая помощь очень ценится

также, если кто-то хорош в linq.js, преобразование первого в linq.js было бы очень здорово!

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я думаю, Zip - это то, что вы ищете.

Enumerable.Range(refx - 1, 3).Zip(Enumerable.Range(refy - 1, 3),
    (x, y) => new Tuple<int, int>(x, y))
    .Where(t => (t.Item1 >= 0) && (t.Item2 <= 0)
    && (t.Item1 < array.GetLength(0)) && (t.Item2 < array.GetLength(1))
    && !((t.Item1 == refx) && (t.Item2 == refy)))
    .Select(t => new Location(t.Item1, t.Item2));
0 голосов
/ 14 марта 2012

Это будет эквивалентно:

    var set = Enumerable.Range(refx - 1, 3)
            .Select(x => Enumerable.Range(refy - 1, 3)
                .Where(y => (x >= 0 && y >= 0) &&
                    (x < array.GetLength(0) && y < array.GetLength(1)) &&
                    !(x == refx && y == refy))
                .Select(y => new Location(x, y)))
            .SelectMany(x => x);
...