2016-04-23 2 views
1

Ich habe eine Tabelle in der Datenbank, dass es einen Spaltennamen hat. Ich muss den Namen aller Elemente ändern, wenn ich die Tabelle vor dem Anzeigen in Grid gelesen habe. Ich muss diese LINQ-Klausel verwendenVerwenden Sie die Funktion indexOf() in LINQ in vb.net oder C#?

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection 
         Select hospitalName = l.HOSPITAL_NAME.Substring(0,l.HOSPITAL_NAME.IndexOf("--")) 

, wenn ich über Code verwende ich diese Fehlermeldung:

LINQ to Entities erkennt nicht die Methode ' Int32 IndexOf (System.String, System. StringComparison) ' Methode, und diese Methode kann nicht in einen Store-Ausdruck übersetzt werden.

aber wenn ich entfernen IndexOf() seine Arbeit richtig:

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection 
        Select hospitalName = l.HOSPITAL_NAME.Substring(10) 

Wie kann ich entfernen etwas tun aus meiner Zellen so?

+0

Wenn die Zeichenfolge "-" nicht gefunden wird, geben Sie eine -1 zurück. So erhalten Sie dann Substring (0, -1), die die Fehlermeldung verursacht. – jdweng

+0

@jdweng - Dies ist zwar ein Problem, es ist jedoch nicht die Ursache des Fehlers. Die Ursache des Fehlers liegt in der Tatsache, dass die Entity Framework-Engine nicht weiß, wie man 'IndexOf' in einen SQL-Ausdruck übersetzt. –

Antwort

1

Verwenden Sie vielleicht anonym?

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection 
         Select New With {.hospitalName = l.HOSPITAL_NAME.Substring(0,l.HOSPITAL_NAME.IndexOf("--"))} 
+0

Danke .. könntest du mir bitte beschreiben, was genau passiert ist Witz Diese Punkte? – Mohammad

0

In der Fehlermeldung, die unerkannt Methode ist „Int32.IndexOf“, ist der Aufrufer von „IndexOf“ Methode „Int32“ anstelle von „String“, gibt es eine Möglichkeit, dass Ihr HOSPITAL_NAME eine Zahl sein kann ??

Wenn Sie das Problem nicht finden können, können Sie die regulären Ausdrücke anstelle von „Substring“ Methode versuchen, wie diese (I C# verwenden, so ... das ist die C# -Code, sorry dafür):

Regex regex = new Regex("--.*"); 
var hospitalList = From l In db_Obj.VWrmz_HospitalCorrection 
        Select hospitalName = regex.Replace(l.HOSPITAL_NAME, ""); 

Hoffe, das kann helfen

+0

Es ** sagt nicht ** Int32.IndexOf' aber 'Int32 IndexOf'. Das bedeutet, dass _ ** der Rückgabewert ** _ von "IndexOf" ist "Int32". –

+0

mein Missverständnis ..... danke – baiyangcao

0

Hier ist eine C# -Version dafür.
LINQ to EF kann nicht IndexOf Methode zu SQL-Syntax übersetzen. Sie können die Daten abrufen und die Operation später ausführen.

from ll in (from l in db_Obj.VWrmz_HospitalCorrection 
select hospitalName = l.HOSPITAL_NAME).ToList() 
select ll.Substring(0, ll.IndexOf("--"))