0

DBテーブル内の未読メッセージの数を数えようとしていますが、非常に難しいことがわかっています。オンラインでチュートリアルを読んだこともありますが、役に立ちません。

私がしていることは単純なはずです。

これが私がやろうとしていることです:

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に変更しました。記録係は必要ありません。必要なのはスカラー値だけなので、(うまくいけば、あなたが持っていた等式での暗黙の変換に関する問題を取り除くことができます。

また、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 に答える