我有以下数据库:
表消息:
- 负责存储发送的消息做不同的电子邮件地址。
表电子邮件:
- 只负责存储电子邮件地址(主键 = 电子邮件)(toEmail 与表电子邮件有关系)(Sotres Foo@gmail.com、Foo2@gmail.com 等...)
表联系人:
- 用于存储用户的联系人。(商店马克、约翰、汤姆等……)
表联系人电子邮件
- 需要此表,因为一个联系人可能有多个电子邮件地址。(存储在表 Emails 中找到的 id)
无论如何这里是一个问题: 我想创建一个查询,它将选择在特定日期发送的所有消息。如果存在,我想在查询中包含联系人姓名。我已经创建了以下查询,但速度很慢:
Func<string, Contact> tryGetContact = (email)=>{
var contactEmail = db.ContactEmails.FirstOrDefault(x=>x.IdEmail==email);
if(contactEmail==null)
return null;
return contactEmail.Contact; // navigational property created by entity framework.
};
var query = from msg in db.Messages
join email in db.Emails on msg.ToEmail equals email.Email
where msg.Date < "some date" && msg.Date > "some other date"
select new
{
MessageSubject = msg.Subject,
ToEmail = email.Email,
Contact = tryGetContact(email.Email) // this slows down the query!
};
为了使我的查询执行得更快,我是否需要将所有联系人存储在字典中并将此查询分成 2 个查询?
将所有联系人存储在字典中将使事情变得更加高效。但是从数据库中检索我不需要大部分联系人的所有联系人让我觉得我在浪费资源。