Il motivo dell'errore è l'ambito, che è quello che l'errore "metodo non supportato" sta dicendo.
Questo di solito accade quando si usa un Linq per [riempire il bianco] ORM. Quindi, immagino che le tue entità debbano provenire da uno strumento ORM, qualcosa come Entity Framework, e tu stai usando qualcosa come Linq alle Entità.
Quando si utilizza linq, la query non viene enumerata fino a quando non si accede ad essa, che per un ORM significa colpire il database o altro repository di dati. Questa azione ritardata può causare un comportamento strano se non si sa che c'è, come questo errore.
Tuttavia, il codice locale (non linq) e la query sono intrecciati, quindi il compilatore da linq a [] non sa come gestire il codice locale durante la compilazione del codice linq. Quindi l'errore "metodo non supportato" - è fondamentalmente lo stesso che fare riferimento a un metodo privato al di fuori della classe, il metodo che hai chiamato è sconosciuto nell'attuale scope.
In altre parole, il compilatore tenta di compilare la query e colpisce il database quando si esegue il risultato. ToString(), ma non conosce nulla sulla variabile privata di CustomerNames o sul metodo foreach. La logica del database e la logica dell'oggetto locale devono essere mantenute separate: risolvere completamente i risultati delle query del database prima di utilizzarle localmente.
Si dovrebbe essere in grado di scrivere in questo modo:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
Se si dispone di mantenere il foreach (per la logica più complicato, non per questo semplice di un esempio) è ancora necessario risolvere il LINQ to [] porzione (forzandolo per enumerare i risultati della query) prima di coinvolgere qualsiasi codice non-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());
}
fonte
2009-10-12 18:32:30
in quale linea? L'unico punto apparente per l'errore è il risultato. –
Cosa sono le "entità"? –
fa un Console.WriteLine (result.ToString()); lavoro? –