2016-06-21 21 views
0

Ich habe Stück Code in C# in Epicor10 konvertiert. Der an Bord Compiler ermöglicht für diesen Code, aber wenn es von der API ausgelöst I erhalten:LINQ to Entities erkennt die Methode 'System.Object get_Item (System.String)' nicht Epicor10

LINQ to Entities nicht die Methode ‚System.Object get_Item (System.String)‘ Methode, und diese Methode kann nicht erkennen in einen Geschäftsausdruck übersetzt werden.

Ich habe es zu diesem Teil meiner where-Klausel eingrenzen:

&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0 

es Teil dieses Schnipsel ist:

var ttRcvDtlRow = ttRcvDtl_iterator; 
    foreach (var Part_iterator in (from Part_Row in Db.Part 
            where string.Compare(Part_Row.Company, ttRcvDtlRow.Company, true) == 0 
            && string.Compare(Part_Row.PartNum, ttRcvDtlRow.PartNum, true) == 0 
            /*&& string.Compare((string)Part_Row["ShortChar01"] ,"None",true)!=0*/ 
                    && string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0 
              select Part_Row)) 

Vorschläge, wie sie zu beheben. Ich verstehe aus anderen Posts, dass dies passiert b/c Linq sendet dies an SQL und es gibt ein Problem in der Übersetzung (oder etwas ähnliches)

Indexer?

Erp.Tables.Part Part; 
foreach (var ttRcvDtl_iterator in (from ttRcvDtl_Row in ttRcvDtl 
           where (string.Equals(ttRcvDtl_Row.RowMod, IceRow.ROWSTATE_ADDED, StringComparison.OrdinalIgnoreCase) || string.Equals(ttRcvDtl_Row.RowMod, IceRow.ROWSTATE_UPDATED, StringComparison.OrdinalIgnoreCase)) 
           && String.IsNullOrEmpty(ttRcvDtl_Row.LotNum) 
           select ttRcvDtl_Row)) 

Danke, JM

+1

Was ist der Typ von 'Part_Row'? Und können Sie den Code des Indexers anzeigen? Es muss eine Möglichkeit geben, dies in einen 'FirstOrDefault (Ausdruck)' umzuschreiben. –

+0

Bitte bearbeiten Sie die Frage. Code in Kommentaren ist schwer zu lesen. –

+0

Entschuldigung, dies ist neu. – JMar

Antwort

0

"Ich stamme aus anderen Beiträgen verstehen, dass diese b/c Linq sendet diese an SQL und es gibt ein Problem in der Übersetzungs geschieht"

Das ist genau das, was ist Ereignis. EF kann nicht string.Compare in eine SQL-Methode konvertieren.

&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0 

sollte

&& ((string)Part_Row["ShortChar01"]).ToLower() != "none" 

Abhängig von Ihren SQL Server-Einstellungen sein, müssen Sie den ToLower nicht einmal benötigen(), wie Sie alle String-Vergleiche Groß- und Kleinschreibung standardmäßig eingestellt werden können.

+4

Die Exception OP wird definitiv nicht von 'string.Compare' verursacht, aber offensichtlich von' Part_Row ["ShortChar01"] '(' 'System.Object get_Item (System.String) 'aka indexer) –

+0

Ja, sein Fehler zeigt darauf, aber ich bin überzeugt, dass es aufgrund der string.Compare ist. EF kann nicht damit umgehen (zumindest das letzte Mal, als ich EF benutzt habe). – Spivonious

+0

* letztes Mal habe ich EF * Das muss vor 4.1 gewesen sein ... Es ist wirklich der Indexer. –

Verwandte Themen