我可以在Lambda中从byte []转换为String吗?

时间:2016-05-08 21:25:20

标签: c# entity-framework linq lambda

  

附加信息:LINQ to Entities无法识别方法'System.String ToString(System.Object)'方法,并且此方法无法转换为商店表达式。

好的,“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是byte []的类型。有没有办法在lambda中做到这一点?

4 个答案:

答案 0 :(得分:3)

正如您所说,Linq to Entities并不承认.ToString()次来电;它不知道如何将这些转换为SQL。但是,你可以在内存中运行它;只需解析对象(调用.ToList()或其他东西),然后对内存中的对象执行select语句。它将成为Linq to Objects并且将被允许。

这是否适用于你想要的目的是一个不同的问题,但你肯定能够以这种方式在任何对象上调用.ToString()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  

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

我在我的代码上尝试了它并且它有效。我做了什么?每当我从数据库获取数据时,我首先调用 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();

答案 3 :(得分:-1)

试试这个

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