2015-05-14 25 views
5

Ciao Sto usando una query linq che sta lanciando l'errore LINQ a Entities non riconosce il metodo 'System.String ToString (Int32)' metodo e questo metodo non può essere tradotto in un'espressione di negozio.LINQ to Entities non riconosce il metodo 'System.String ToString (Int32)'

 List<string> resultMap = (from item in mapResult 
            select Convert.ToString(item.ResultDE)).ToList(); 

errore sta gettando in questa informativa qui di seguito

 List<Result_DE> resultList = (from result in db.Result_DE 
             where result.IsActive == "1" 
             && resultMap.Contains(Convert.ToString(Convert.ToInt32(result.ID))) 
             select result).ToList(); 

prego di dirmi il modo corretto di scrivere questa query.

+0

ho provato con la dichiarazione di seguito. Esegue ma non fornisce alcuna uscita 'Lista risultante a = (dal risultato db.Result_DE dove result.IsActive == "1" && resultMap.Contains (SqlFunctions.StringConvert (result.ID)) selezionare risultato). ToList(); ' – user1590948

+0

Stai convertendo una stringa in int e di nuovo in una stringa? –

+0

qual è l'attributo di result.ID –

risposta

2

Non è possibile utilizzare queste funzioni di conversione in un LINQ to Entities dichiarazione, essi non possono essere tradotti in SQL, è necessario fare le conversioni in memoria. Ma non penso che tu debba assolutamente farlo.

Se tu fossi solo utilizzando il resultMap per ottenere il vostro resultList, filtrata da Results dei quali è presente in mapResult il Id, effettuare le seguenti operazioni:

var resultList = db.Result_DE 
    .Where(r => r.IsActive == "1" && mapResult.Any(mr => mr.ResultDE == r.ID)); 
    .ToList(); 

Se mapResult è una collezione in memoria, invece di un IQueryable che è collegato al db contesto, è necessario effettuare le seguenti operazioni:

var resultIds = mapResult.Select(mr => mr.ResultDE).ToList(); 
var resultList = db.Result_DE 
    .Where(r => r.IsActive == "1" && resultIds.Contains(r.ID)); 
    .ToList(); 
+0

Ho modificato la risposta in modo che ora indichi Linq alle entità. Puoi aggiornare il tuo commento se pensi che aggiungere Linq To Sql al mix valga la pena. IMHO è stato confuso e nessuno usa il termine "Linq to DB" – Pawel

+0

@Pawel sono d'accordo, lascerà così com'è. – Alex

+0

Grazie :) .. 'mapResult.Any (mr => mr.ResultDE == r.ID)' ha funzionato – user1590948

0

se il item.ResultDE e result.ID è di tipo variabile di Int32, perché don creare direttamente un List<Int32>?

List<Int32> resultMap = (from item in mapResult 
           select item.ResultDE).ToList<Int32>(); 

List<Result_DE> resultList = (from result in db.Result_DE 
            where result.IsActive == "1" 
            && resultMap.Contains(result.ID) 
            select result).ToList<Result_DE>(); 
2

Prima di c tutti i metodi (ad es. ToString()), devi convertire LINQ in Object usando AsEnumerable().

0

Utilizzare SqlFunctions.StringConvert anziché Convert.ToString.

Una domanda simile è stato chiesto e ha risposto here

Problemi correlati