2016-05-08 53 views
-1

附加信息:LINQ to Entities不能识别方法'System.String ToString(System.Object)'方法,并且此方法不能转换为存储表达式。可以将字节[]转换为Lambda中的字符串吗?

好吧,“ToString()”不能被转换成存储表达式,并且错误是清楚的。

这是我的代码:

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(); 

我想在byte []转换为字符串,因为我的课接受字符串attribut “SlikaThumb”。所以,

SlikaThumb = Convert.ToString(t.SlikaThumb)

t.SlikaThumb是字节[]的类型。有没有办法在lambda中做到这一点?

+1

你有什么期望,你会得到的结果将类似于字符串? –

+0

我不知道我理解你的问题。它是表示来自数据库的照片的字节[]。 – TariqN

+0

'字符串'只能代表文本! –

回答

-1

尝试用这种

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

字节数组用于表示图像,这将失败。 –

+0

'Encoding.Default'!在数据库中存储数据的人不太可能知道该客户端计算机使用的默认编码。 (就像编写这段代码的人可能不知道相同。) –

3

正如你所说,LINQ到实体不承认.ToString()电话;它不知道如何将这些转换为SQL。但是,你可以在内存中运行它;只需解析对象(调用.ToList()或其他),然后对内存中的对象执行select语句。这将是Linq的对象,这将被允许。

这样做是否适合您打算的目的是一个不同的问题,但您绝对可以通过这种方式在任何对象上致电.ToString()

+0

类似这样的:http://pastebin.com/BHhrBmBt – TariqN

+0

如果我只想查询一个对象而不是列表? – TariqN

+0

@TariqN更容易。获取一个对象...并在其属性上调用ToString。 – Casey

0

我猜你可以做的最好的事情是从数据库中直接检索对象,通过使用ToList()或等效方法来实际执行查询,然后在检索列表上工作,将其转换为您想要发送到Android的对象。据我所知,LinqToEntities没有将T-SQL转换为将二进制字段转换为Base64字符串的方法。

+0

如果我只想查询一个对象而不是列表?它与对象列表一起使用,但不与一个对象一起使用。 – TariqN

+0

我想,只要将您的Where()Linq方法更改为FirstOrDefault(),同时维护查询的条件。 – Ismael

+0

我可以调用FirstOrDefault()方法,但之后我无法调用Select方法。 – TariqN

0

好的,这有助于。正如@Casey所说:

Linq to Entities不能识别.ToString()调用;它不知道如何将这些转换为SQL。但是,你可以在内存中运行它;只需解析对象(调用.ToList()或其他),然后对内存中的对象执行select语句。这将是Linq的对象,这将被允许。

我试过了我的代码,它的工作原理。我做了什么?每当我从数据库获取数据,然后执行操作时,我首先调用ToList()方法。

此代码工作正常...

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(); 
相关问题