var pList = (from p in db.RTLS_PERSONDTLS
where (lsdAts <= p.CREATED_TIME &&
p.CREATED_TIME <= DateTime.Now)
where p.OPERATION_TYPE == 1
let pPhotoRow = (from q in db.Cloud_persons_images
where q.Image_name == p.PERSON_ID
where (lsdAts <= q.Createdtime && q.Createdtime <= DateTime.Now)
select q).FirstOrDefault()
let pExt = pPhotoRow.Img_ext
let photoBytes = pPhotoRow.Person_img
Let personPhoto = new PersonPhotoInfo { PDATA = Convert.ToBase64String(photoBytes), PEXT = pExt }
select new PersonListInfoDTO
{
MOB_NO = p.MOBILE_NO,
ACTINACT = (int)p.ACTINACT,
PHOTO = personPhoto
}).AsNoTracking().ToList();
当将字节数组转换为ToBase64String时,由于LINQ实体不识别方法'System.String ToBase64String(Byte[])‘方法,因此出现异常,并且该方法无法转换为存储表达式。是使用sql作为后端存储的。
发布于 2017-04-05 13:22:39
这个怎么样?
var pList =from item in (from p in db.RTLS_PERSONDTLS
where (lsdAts <= p.CREATED_TIME &&
p.CREATED_TIME <= DateTime.Now)
where p.OPERATION_TYPE == 1
let pPhotoRow = (from q in db.Cloud_persons_images
where q.Image_name == p.PERSON_ID
where (lsdAts <= q.Createdtime && q.Createdtime <= DateTime.Now)
select q).FirstOrDefault()
select new {
p.MOBILE_NO,
p.ACTINACT,
Img_ext= pPhotoRow.Img_ext,
photoBytes=pPhotoRow.Person_img
}).ToList()) )
select new PersonListInfoDTO
{
MOB_NO = item.MOBILE_NO,
ACTINACT = (int)item.ACTINACT,
PHOTO = new PersonPhotoInfo { PDATA = Convert.ToBase64String(item.photoBytes), PEXT = pExt }
}).AsNoTracking().ToList();
发布于 2017-04-05 13:43:30
Linq将将您的查询转换为sql,生成的查询将包含对Convert.ToBase64String方法的调用,其中sql不知道该方法。可以执行一个ToList()操作,将对象从数据库加载到内存中,然后应用Convert.ToBase64String方法
var pList = (from item in (from p in db.RTLS_PERSONDTLS
where (lsdAts <= p.CREATED_TIME &&
p.CREATED_TIME <= DateTime.Now)
where p.OPERATION_TYPE == 1
let pPhotoRow = (from q in db.Cloud_persons_images
where q.Image_name == p.PERSON_ID
where (lsdAts <= q.Createdtime && q.Createdtime <= DateTime.Now)
select q).FirstOrDefault())
select new {
p.MOBILE_NO,
p.ACTINACT,
Img_ext= pPhotoRow.Img_ext,
photoBytes=pPhotoRow.Person_img
}).ToList()
.Select(t=> new PersonListInfoDTO
{
MOB_NO = item.MOBILE_NO,
ACTINACT = (int)item.ACTINACT,
PHOTO = new PersonPhotoInfo { PDATA = Convert.ToBase64String(item.photoBytes), PEXT = pExt }
}).ToList();
https://stackoverflow.com/questions/43231948
复制相似问题