我正在使用Visual Studio 2010和c#以及SQL Management studio。
我正在处理邮箱功能。
我写了一个方法,如果用户点击回复按钮,回复内容就是这样..
private string adjustContentForReply(List<Guid> sender)
{
string content = string.Empty;
messageID = (Guid)Session["messageID"];
//haal de ontvangers uit de database van het bericht
List<Guid> receivers = m.bussinesCollection.BussinesMessageReceiver.GetReceivers(messageID);
//pas de inhoud van het bericht aan met de details van het vorige bericht
content = "<br /><br />----------------------------------------<br />";
content += "Ontvangen op: " + m.bussinesCollection.BussinesMessageReceiver.GetMessageReceiver(messageID, boxOwner).DateReceived.ToString() + "<br />";
content += "Onderwerp: " + m.bussinesCollection.BussinesMessage.GetMessageSubject(messageID) + "<br />";
content += "Van: " + m.bussinesCollection.BussinesPerson.GetFullName(sender[0]) + "<br />";
content += "Aan: ";
//Voeg één of meerdere ontvangers toe aan details
foreach (Guid rec in receivers)
{
content += m.bussinesCollection.BussinesPerson.GetFullName(rec);
if (receivers.Count() > 1)
content += "; ";
}
content += "<br />";
content += "----------------------------------------<br /><br />";
//voeg de inhoud van het vorige bericht aan de content
content += m.bussinesCollection.BussinesMessage.GetMessageContent(messageID);
return content;
}
它在行中给我错误
content += "Ontvangen op: " + m.bussinesCollection.BussinesMessageReceiver.GetMessageReceiver(messageID, boxOwner).DateReceived.ToString() + "<br />";
错误的是
对象引用未设置为对象的实例。
GetMessageReceiver()就像这样
public MessageReceiver GetMessageReceiver(Guid msgId, Guid personId)
{
var message = from msg in Db.MessageReceivers
where msg.MessageID.Equals(msgId) && msg.ReceiverID.Equals(personId)
select msg;
return message.Count().Equals(1) ? message.First() : null;
}
当我调试它并获取messageId和BoxOwnerId并在Database中触发查询时,它显示给定组合的两行。
任何人都可以帮助我吗?
嘿问题从那里解决了,现在我可以创建一个回复消息。 但是点击发送按钮页面时,现在会抛出同样的错误。
答案 0 :(得分:3)
你想拥有
return message.First();
而不是
return message.Count().Equals(1) ? message.First() : null;
如果有多个结果,您的代码会返回null
。你说,你在数据库中有两行代表你提供的ID,所以你得到的是null
...
您应该使用First
而不是FirstOrDefault
,因为如果您的消息始终返回的引用不是null
,则代码的结构只能正常运行。
答案 1 :(得分:1)
如果在该行上出现NullReferenceException:
content += "Ontvangen op: " + m.bussinesCollection.BussinesMessageReceiver.GetMessageReceiver(messageID, boxOwner).DateReceived.ToString() + "<br />";
然后null
几乎可以在任何地方。
除非在这种情况下:显然m.bussinesCollection.BussinesMessageReceiver
中没有空值,或者你会在几行之前得到错误。
因此GetMessageReceiver
或DateReceived
为空。
如果没有正好1条消息(0或&gt; = 2),你知道你的GetMessageReceiver方法返回null吗?
答案 2 :(得分:0)
您收到错误是因为您没有检查GetMessageReceiver()
的返回值。您需要确保GetMessageReceiver
无法返回null
,或者您需要在使用任何函数之前检查返回值
MessageReceiver receiver = m.bussinesCollection.BussinesMessageReceiver.GetMessageReceiver(messageID, boxOwner);
if (receiver == null)
// handle error
return;
content += "Ontvangen op: " + receiver.DateReceived.ToString() + "<br />";