我有两张桌子,图片和用户。如果UserID与Users表中的ID匹配,我想返回一个Image。 UserID不是FK,其值在上传照片时存储在数据库中,以及模型中的其他属性。
以下是加入代码:
[HttpGet]
public List<Image> GalleryOnProfilePage()
{
return (from u in db.Users
join i in db.Images on u.Id equals i.UserID
where u.Id == i.UserID
select new
{
ImageID = i.ImageID
}).Select(x => new Image
{
ImageID = x.ImageID
}).ToList();
}
现在我甚至不知道这段代码是否有用并返回符合我愿望的图片:Image.UserID == Users.ID return ImageID
。我坚持以下错误:
实体或复杂类型&#39; JobSite3.Models.Image&#39;不能在LINQ to Entities查询中构造。
以下是视图:
@model List<JobSite3.Models.Image>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table class="table-striped">
@{
int j = 0;
for (int i = 0; i < Model.Count(); i += 1)
{
j = i;
<tr>
@while (j < i + 1 && j < Model.Count())
{
<td>
<img src="data:image/png;base64,@Convert.ToBase64String(Model[j].ImageData,0,Model[j].ImageData.Length)" width="100" />
</td>
j++;
}
</tr>
}
}
</table>
}
非常感谢您的支持
答案 0 :(得分:1)
正如@ChrisF所说,你们已经按照相同的栏目加入了。但是这里你的问题不是加入。该异常表明无法在自定义select语句中构造实体本身。在您的查询中,您尝试使用以下代码行选择新的Image
:}).Select(x => new Image ...
。但 Linq中不允许实体,因为Image
是实体类型。你有两个解决方法。
由于您只是选择Id,只需返回 ID列表:
return (from u in db.Users
join i in db.Images on u.Id equals i.UserID
where u.Id == i.UserID
select i.ImageID)
.ToList();
或者您可以在选择AsEnumerable
之前使用Image
函数将数据加载到内存中:
return (from u in db.Users
join i in db.Images on u.Id equals i.UserID
where u.Id == i.UserID
select new
{
ImageID = i.ImageID
})
.AsEnumerable() // Load data into memory
.Select(x => new Image
{
ImageID = x.ImageID
}).ToList();