2016-05-08 13 views
-1

Weitere Informationen: LINQ to Entities erkennt die Methode 'System.String ToString (System.Object)' nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.Kann ich in Lambda von Byte [] zu String konvertieren?

Ok, "ToString()" kann nicht in einen Ausdruck übersetzt werden, und der Fehler ist klar.

Dies ist mein Code:

var narudzbe = db.Narudzbe 
        .Where(x => x.KupacID == id && x.Status == true) 
        .Select(x => new NarudzbeVM() 
        { 
         BrojNarudzbe = x.BrojNarudzbe, 
         Datum = x.Datum, 
         KupacID = x.KupacID, 
         NarudzbaID = x.NarudzbaID, 
         Otkazano = x.Otkazano, 
         Status = x.Status, 
         StavkeNarudzbe = db.NarudzbaStavke 
             .Where(y => y.NarudzbaID == x.NarudzbaID) 
             .Select(z => new NarudzbaStavkeVM() 
             { 
              Kolicina = z.Kolicina, 
              NarudzbaID = z.NarudzbaID, 
              NarudzbaStavkaID = z.NarudzbaStavkaID, 
              Proizvod = db.Proizvodi 
                  .Select(t => new ProizvodTest() 
                  { 
                   Cijena = t.Cijena, 
                   ProizvodID = t.ProizvodID, 
                   JedinicaMjere = t.JediniceMjere.Naziv, 
                   Naziv = t.Naziv, 
                   Sifra = t.Sifra, 
                   SlikaThumb = Convert.ToString(t.SlikaThumb) 
                  }) 
                  .Where(k => k.ProizvodID == z.ProizvodID) 
                  .FirstOrDefault() 
             }).ToList()  
        }).ToList(); 

I byte [] in String konvertieren möchten, da meine Klassenzeichenfolge für attribut "SlikaThumb" akzeptieren. So

SlikaThumb = Convert.ToString (t.SlikaThumb)

t.SlikaThumb ist Typ byte []. Gibt es eine Möglichkeit es in Lambda zu tun?

+1

Was erwarten Sie die Zeichenfolge, die Sie als das Ergebnis aussehen wird, bekommen? –

+0

Ich bin mir nicht sicher, ob ich deine Frage verstehe. Es ist Byte [], das ein Foto aus der Datenbank darstellt. – TariqN

+0

'String' kann nur Text darstellen! –

Antwort

-1

versuchen mit diesem

string yourString= System.Text.Encoding.Default.GetString(
       System.Text.Encoding.Default.GetBytes(yorbyteArray)); 
+0

Das Byte-Array soll ein Bild darstellen, das schlägt fehl. –

+0

'Encoding.Default'! Es ist unwahrscheinlich, dass die Person, die diese Daten in der Datenbank gespeichert hat, die Standardcodierung kennt, die von diesem Clientcomputer verwendet wird. (So ​​wie es möglicherweise nicht wahrscheinlich ist, dass die Person, die diesen Code schreibt, das gleiche weiß.) –

3

Wie Sie gesagt haben, Linq to Entities nicht .ToString() Anrufe erkennen; Es weiß nicht, wie man diese in SQL umwandelt. Sie können das jedoch im Speicher ausführen. Lösen Sie einfach die Objekte auf (rufen Sie .ToList() oder etwas auf) und führen Sie dann die SELECT-Anweisung für die speicherinternen Objekte aus. Es wird Linq zu Objects und das wird erlaubt sein.

Ob das für den beabsichtigten Zweck funktioniert, ist eine andere Frage, aber Sie können auf jeden Fall .ToString() auf jedes Objekt aufrufen.

+0

Etwas wie dieses: http://pastebin.com/BHhrBmBt – TariqN

+0

Was, wenn ich nur ein Objekt abfragen möchte, um nicht aufzulisten? – TariqN

+0

@TariqN Noch einfacher. Holen Sie sich das eine Objekt ... und rufen Sie ToString in seiner Eigenschaft auf. – Casey

0

Ich denke, das Beste, was Sie tun können, ist das Objekt aus der Datenbank abzurufen, wie sie sind, indem Sie ToList() oder eine äquivalente Methode verwenden, um die Abfrage auszuführen, danach arbeiten Sie an der abgerufenen Liste zu konvertieren die Objekte, die Sie an Android senden möchten. Soweit ich weiß, gibt es keine übersetzte Methode zu T-SQL von LinqToEntities, um ein Binärfeld in eine Base64-Zeichenfolge umzuwandeln.

+0

Was, wenn ich nur ein Objekt abfragen möchte, nicht auflisten? Es funktioniert mit einer Liste von Objekten, aber nicht mit einem Objekt. – TariqN

+0

Ändern Sie einfach Ihre Where() Linq Methode zu FirstOrDefault(), ich denke, unter Beibehaltung der Bedingungen Ihrer Abfrage. – Ismael

+0

Ich kann FirstOrDefault() -Methode aufrufen, aber danach kann ich Select-Methode nicht aufrufen. – TariqN

0

Ok, das hilft. Wie @Casey sagen:

Linq zu Entities erkennt nicht .ToString() Anrufe; Es weiß nicht, wie man diese in SQL umwandelt. Sie können das jedoch im Speicher ausführen. Lösen Sie einfach die Objekte auf (rufen Sie .ToList() oder etwas auf) und führen Sie dann die SELECT-Anweisung für die speicherinternen Objekte aus. Es wird Linq zu Objects und das wird erlaubt sein.

Ich habe es auf meinem Code versucht und es funktioniert. Was ich getan habe? Ich rufe zuerst ToList() Methode, wenn ich Daten aus der Datenbank abrufe und dann die Operationen ausführen.

Dieser Code funktioniert gut ...

List<NarudzbeVM> narudzbe = db.Narudzbe.Where(x => x.KupacID == id).ToList(). 
             Select(x => new NarudzbeVM() 
             { 
              BrojNarudzbe = x.BrojNarudzbe, 
              Datum = x.Datum, 
              KupacID = x.KupacID, 
              NarudzbaID = x.NarudzbaID, 
              Otkazano = x.Otkazano, 
              Status = x.Status, 
              StavkeNarudzbe = db.NarudzbaStavke.Where(y => y.NarudzbaID == x.NarudzbaID).ToList(). 
                  Select(z => new NarudzbaStavkeVM() 
                  { 
                   Kolicina = z.Kolicina, 
                   NarudzbaID = z.NarudzbaID, 
                   NarudzbaStavkaID = z.NarudzbaStavkaID, 
                   ProizvodID = z.ProizvodID, 
                   Proizvod = db.Proizvodi.Where(k => k.ProizvodID == z.ProizvodID).ToList(). 
                      Select(t => new ProizvodTest() 
                      { 
                       Cijena = t.Cijena, 
                       ProizvodID = t.ProizvodID, 
                       JedinicaMjere = t.JediniceMjere.Naziv, 
                       VrstaProizvoda = t.VrsteProizvoda.Naziv, 
                       Naziv = t.Naziv, 
                       Sifra = t.Sifra, 
                       SlikaThumb = Convert.ToBase64String(t.SlikaThumb), 
                      }).FirstOrDefault() 
                  }).ToList() 

             }).ToList(); 
Verwandte Themen