我正在尝试计算数据库表中未读消息的数量,但事实证明这非常困难。我甚至在线阅读教程但无济于事。
我正在做的事应该很简单。
这是我正在尝试做的事情:
COUNT NUMBER OF ROWS IN NOTIFICATIONSTABLE
WHERE USERID = @0 AND MESSAGEWASREAD = FALSE
有人可以指出我在正确的方向吗?任何帮助将不胜感激。
谢谢
@helper RetrievePhotoWithName(int userid)
{
var database = Database.Open("SC");
var name = database.QuerySingle("select FirstName, LastName, ProfilePicture from UserProfile where UserId = @0", userid);
var notifications = database.Query("SELECT COUNT(*) as 'counter' FROM Notifications WHERE UserID = @0 AND [Read] = @1", userid, false);
var DisplayName = "";
if(notifications["counter"] < 1)
{
DisplayName = name["FirstName"] + " " + name["LastName"];
}
else
{
DisplayName = name["FirstName"] + ", you have " + notifications["counter"] + " new messages.";
}
<a href="@Href("~/Home")" title="My Account"><img src="@Href("~/Shared/Assets/Images/" + name["ProfilePicture"] + ".png")" id="MiniProfilePicture" /> @DisplayName</a>
database.Close();
}
答案 0 :(得分:8)
SELECT COUNT(*) FROM NotificationsTable WHERE
UserID = @UserID AND MessageWasRead = 0;
好的,这是基于我认为应该做的事情。我不知道底层类型,所以这将是我最好的猜测。
var notifications = database.QuerySingle("Select COUNT(*) as NumRecs....");
if((int)notifications["NumRecs"] > 0)) .......
我将通知查询更改为QuerySingle。你不需要一个记录器,你只需要一个标量值,所以应该(希望通过你所拥有的等值中的隐式转换来消除你的问题。
我还会检查你的数据库对象是否实现IDisposable(如果是这样的话,将它放在using语句中),因为你调用close,这实际上不会调用close(我知道它不是处理但是它可能有处置如果你在调用close函数之前遇到和异常,那么。
答案 1 :(得分:0)
int unreadMessageCount = db.Query("SELECT * FROM Notification WHERE UserId=@0 AND Read=@1",UserId,false).Count();
string displayname = name["FirstName"] + " " + name["LastName"] + unreadMessageCount>0?",you have " + unreadMessageCount :"";