我正在嘗試創建一個郵件系統(類似於gmail的東西),但這將用作私人郵件系統。不幸的是(對我來說),我一直在寫一個查詢,它會在列表視圖中顯示消息接收者的名字。LINQ to SQL查詢問題(無法獲得正確的值)
這裏是郵件系統的數據庫架構:
我相信該架構是非常清楚的,但讓我先簡單介紹一下每個表。 MailState表具有關於某個用戶的每封郵件的郵件位置(收件箱,發件人,垃圾箱)的數據。 MailStatus只有兩個狀態:「Read」或「New」。這是顯而易見的郵件表。
我最近幾個小時一直在嘗試的是在特定用戶的「已發送」郵箱中顯示郵件,而且我差不多已經完成了。問題是我不能讓我的查詢顯示正確的User.DisplayName,只要我檢查這是哪個郵箱(由登錄用戶的ID確定)。
這是我一直在使用的代碼:
var _messages = from m in db.MailState
select m;
if (mailboxType == "Inbox")
{
var mailbox = from m in _messages
where m.idUser == idUser
where m.Mail.idSender != idUser
where m.MailLocation.Name == mailboxType
select new { m.idMail, m.Mail.User.DisplayName, m.Mail.DateSent, m.Mail.Subject };
lvMailbox.DataSource = mailbox;
}
else if (mailboxType == "Sent")
{
var mailbox = from m in db.MailState
where m.MailLocation.Name == mailboxType
select new { m.Mail.idSender, m.idMail, m.Mail.DateSent, m.Mail.Subject, m.User.DisplayName };
//mailbox = mailbox.Where(m => m.idSender == idUser);
lvMailbox.DataSource = mailbox;
}
else
{
//NOTHING YET
}
lvMailbox.DataBind();
收件箱中工作正常,但「已發送」郵箱顯示已登錄的用戶,而不是顯示收件人名稱的名稱。最令我困擾的是,如果我的查詢不包含登錄用戶的where子句,它會正確顯示所有內容。這就是爲什麼我需要一些幫助。
P.S.歡迎任何其他建議(關於代碼,數據庫等)!
你好!首先,我想感謝你的出色解釋和你的努力!當我看到你的回答很詳細時,我感到非常驚訝。但是,我遇到了一些麻煩。現在我的收件箱不起作用,即它與「已發送」郵箱具有相同的症狀(錯誤地命名爲發件人)。關於,發送郵箱我還沒有告訴你什麼,因爲,正如你告訴我做的,我試圖將收件人集合轉換爲單個字符串,但由於缺乏經驗,我卡住了,所以當我弄清楚如何得到它我會發布你的回覆!附:再次感謝您的回覆! ;) –
沒問題。看看'String.Join(...)'。 – Enigmativity
我遵循你的建議,使用'String.Join',並被綁定到listview。任何幫助,將不勝感激。這是代碼: 'foreach(var in mailbox) { foreach(string r in m.Recipients) { string idMail = m.idMail.ToString(); string DateSent = m.DateSent.ToString(); string Subject = m.Subject; string DisplayName = string.Join(「」,m.Recipients); } }' –