Usando Linq con matriz 2D, seleccione no encontrado

Quiero utilizar Linq para consultar una matriz 2D pero me sale un error:

No se pudo encontrar una implementación del patrón de consulta para el tipo de fuente ‘SimpleGame.ILandscape [ , ]’. ‘Seleccionar’ no encontrado. ¿Te falta una referencia a ‘System.Core.dll’ o una directiva de uso para ‘System.Linq’?

El código está siguiendo:

var doors = from landscape in this.map select landscape; 

He comprobado que System.Core la referencia System.Core y el uso de System.Linq .

¿Alguien podría dar algunas posibles causas?

Para usar su matriz multidimensional con LINQ, simplemente necesita convertirla a IEnumerable . Es bastante simple, aquí hay dos opciones de ejemplo para consultar

 int[,] array = { { 1, 2 }, { 3, 4 } }; var query = from int item in array where item % 2 == 0 select item; var query2 = from item in array.Cast() where item % 2 == 0 select item; 

Cada syntax convertirá la matriz 2D en una IEnumerable (porque dices int item en una cláusula from o array.Cast() en la otra). A continuación, puede filtrar, seleccionar o realizar cualquier proyección que desee con los métodos LINQ.

Su mapa es una matriz multidimensional; no son compatibles con las operaciones de consulta LINQ (ver más ¿Por qué las matrices multidimensionales C # no implementan IEnumerable ? )

Necesitarás aplanar el almacenamiento de tu matriz (probablemente la mejor manera de hacerlo por varias razones) o escribir un código de enumeración personalizado para ella:

 public IEnumerable Flatten(T[,] map) { for (int row = 0; row < map.GetLength(0); row++) { for (int col = 0; col < map.GetLength(1); col++) { yield return map[row,col]; } } }