因此,我试图弄清楚如何检查数据库中是否存在某些内容。在这种情况下,正在发生的事情是确定用户是否“喜欢”图像,并将其作为真值或假值返回。我这样做的方法是检查此“赞”是否存在一个或多个版本,如果存在,则返回true,否则返回false。这是代码。
我目前正在做什么:
public bool checkCurrentUserLiked(int currentUserId, int imageId)
{
var hasData = _context.PhotoLikes.Where(x => x.LikerId == currentUserId && x.ImageId == imageId);
var dataToReturn = false;
if (hasData.Count() >= 1)
{
// entity exists in database
dataToReturn = true;
}
else
{
dataToReturn = false;
// nope
}
return dataToReturn;
}
我尝试过的另一种方式
public bool checkCurrentUserLiked(int currentUserId, int imageId)
{
bool hasData = _context.PhotoLikes.Any(x => x.LikerId == currentUserId && x.ImageId == imageId);
var dataToReturn = false;
if (hasData)
{
// entity exists in database
dataToReturn = true;
}
else
{
dataToReturn = false;
// nope
}
return dataToReturn;
}
当我到达:
如果(hasData.Count()== 1),我得到的错误是: 在先前的操作完成之前,第二操作在此上下文上开始。不保证任何实例成员都是线程安全的。
它不运行
[编辑]
我在这里遇到的错误是:无法将类型'System.Linq.IQueryable'隐式转换为'bool'
public bool checkCurrentUserLiked(int currentUserId, int imageId)
{
_context.PhotoLikes.Any(x => x.LikerId == currentUserId && x.ImageId == imageId);
}
答案 0 :(得分:1)
尝试一下:
public bool checkCurrentUserLiked(int currentUserId, int imageId)
=> _context.PhotoLikes.Any(x => x.LikerId == currentUserId && x.ImageId == imageId));
答案 1 :(得分:0)
我已经尝试了所有建议的方法,但是没有一个起作用,我最终要做的是删除该函数并将其重写在需要它的属性内。
这是我的意思:
'hasCurrentUserLiked'是我试图解决的问题。我并没有真正进行任何重大更改,只是更改了代码(不确定为什么这样做,但确实如此)
(f, p) => new FeedsForReturnDto
{
Id = f.feed.Id,
PhotoUrl = f.feed.photoUrl,
Username = f.feed.Username,
Description = f.feed.Description,
DateAdded = f.feed.DateAdded,
IsImage = f.feed.IsImage,
// v Is the thing we were trying to figure out
hasCurrentUserLiked = _context.PhotoLikes.Any(x => x.LikerId == user.Id && x.ImageId == f.feed.Id),
Likes = _context.PhotoLikes.Where(x => x.ImageId == f.feed.Id).Count()
});