附加信息: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中做到这一点?
答案 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));