El motivo de su error es alcance, que es lo que el error "método no admitido" le indica.
Esto generalmente ocurre cuando se utiliza un Linq para [llenar el espacio en blanco] ORM. Entonces, supongo que tus entidades deben ser de una herramienta ORM, algo así como Entity Framework, y estás usando algo como Linq to Entities.
Al usar linq su consulta no se enumera hasta que acceda a ella, lo que para un ORM significa golpear la base de datos u otro repositorio de datos. Esta acción retrasada puede causar un comportamiento extraño si no sabe que está allí, como este error.
Pero, tiene código local (no linq) y su consulta entrelazada, por lo que el compilador linq to [] no sabe cómo manejar su código local al compilar el código linq. Por lo tanto, el error "método no admitido" - es básicamente lo mismo que hacer referencia a un método privado desde fuera de la clase, el método que usted llamó es desconocido en el alcance actual.
En otras palabras, el compilador intenta compilar su consulta y acceder a la base de datos cuando realiza el resultado.ToString(), pero no sabe nada acerca de la variable privada de CustomerNames o el método foreach. La lógica de la base de datos y la lógica del objeto local deben mantenerse separadas: resuelva por completo los resultados de la consulta de la base de datos antes de usarla localmente.
Usted debe ser capaz de escribir así:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
Si usted tiene que mantener el foreach (por lógica más complicada, no para este sencillo de un ejemplo) que todavía tienen que resolver el LINQ to [] porción (forzándolo a enumerar los resultados de la consulta) antes de involucrar cualquier código que no sea linq:
var query = from c in entities.Customer
select c.CustomerName;
var qryList = query.ToList();
List<string> customerNames = new List<string>();
foreach (var result in qryList)
{
customerNames.Add(result.ToString());
}
¿en qué línea? El único lugar aparente para el error es el resultado. –
¿Qué es "entidades"? –
realiza una Console.WriteLine (result.ToString()); ¿trabajo? –