0

我正在尝试计算我的数据库表中未读消息的数量,但事实证明这非常困难。我什至在网上阅读了教程,但无济于事。

我所做的应该很简单。

这是我正在尝试做的事情:

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" />&nbsp;@DisplayName</a> 

database.Close(); 

}

4

2 回答 2

8
SELECT COUNT(*) FROM NotificationsTable WHERE 
 UserID = @UserID AND MessageWasRead = 0; 

Sql 计数函数

好的,这是基于我认为应该做的。我不知道底层类型,所以这将是我最好的猜测。

var notifications =  database.QuerySingle("Select COUNT(*) as NumRecs....");

if((int)notifications["NumRecs"] > 0)) .......

我将通知查询更改为 QuerySingle。你不需要一个记录,你只需要一个标量值,所以应该(希望消除你在 equals 中隐式转换的问题。

我还将检查您的数据库对象是否在您调用 close 时实现了 IDisposable(如果是,则将其放在 using 语句中),并且这实际上不会调用 close(我知道它不是 dispose,但它也可能有 dispose)如果在调用 close 函数之前遇到异常。

于 2012-05-15T12:50:46.290 回答
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 :"";
于 2013-10-04T14:02:43.837 回答