2011-08-17 144 views
1

我有一个使用Email.SendMail()的问题。我需要从Event_Location,Event_Start等添加更多细节到数据库的Events表中的“Email Msg”,但var item已被事件调用。我想知道是否有办法将两个var即事件和成员放在foreach循环或其他方法中?发送电子邮件asp.net mvc 3

public void Send() 
{ 
    var events = from a in db.Members.ToList() 
       join e in db.Events.ToList() on a.Hobby_Code equals e.Hobby_Code 
       where a.Postal_Code == e.Postal_Code || e.Event_Status ==("A") 

    var member= from w in db.Members.TOList() 
       join z in db.Events.ToList() on w.Event_ID equals z.Event_ID 
       select w 

    foreach (var item in events) 
     Email.SendMail(item.Member_Email_Address,"Subject","Email Msg",false); 
} 

模型类会员

public class Member 
    { 
    [Key] 
    [ScaffoldColumn(false)] 
    public int Member_ID { get; set; } 



    [Required(ErrorMessage = "A Section Name is required")] 
    [DisplayName("Section Name")] 
    public string Postal_Code { get; set; } 


    [Required(ErrorMessage = "An email address is required")] 
    [DisplayName("Email Address")] 
    public string Member_Email_Address { get; set; } 



    [DisplayName("Hobby Code")] 
    [Required(ErrorMessage = "A Hobby is required")] 
    public string Hobby_Code { get; set; } 

    [DisplayName("Event ID")] 
    public int? Event_ID { get; set; } 

    public string FullName 
    { 
     get 
     { 
      return Member_Last_Name + " " + Member_First_Name; 
     } 
    } 


    public virtual Section Section { get; set; } 
    public virtual Event Event { get; set; } 

} 

模型类的事件

 public class Event 
{ 

    [ScaffoldColumn(false)] 
    [Key] 
    public int Event_ID { get; set; } 

    [Required(ErrorMessage = "A Event Location is required")] 
    [DisplayName("Event Location")] 
    public string Postal_Code { get; set; } 

    [DisplayName("Event Status")] 
    public string Event_Status { get; set; } 

    [DisplayName("Event Start Date")] 
    [Required] 
    public DateTime Event_Start { get; set; } 

    [DisplayName("Event End Date")] 
    [Required] 
    public DateTime Event_End { get; set; } 

    [DisplayName("Event Type")] 
    [Required(ErrorMessage = "A Event Type is required")] 
    public string Hobby_Code { get; set; } 

    [Required] 
    [StringLength(100)] 
    [DataType(DataType.MultilineText)] 
    [DisplayName(" Event Description")] 
    public string Event_Description { get; set; } 
+0

什么成员和事件模型类看起来像? – link664

+0

成员中的Event_ID是Event中的Event_ID的外键引用吗?换句话说,每个成员都有一个事件吗? – link664

+0

是会员被邀请参加一个活动 – Roo

回答

1

你可以使用匿名方法只返回你想要的那些属性,即:

var events = from a in db.Members.ToList() 
       join e in db.Events.ToList() on a.Hobby_Code equals e.Hobby_Code    
       where a.Postal_Code == e.Postal_Code || e.Event_Status ==("A") 
       select new { email = a.Member_Email_Address, location = e.Event_Location, eventStart = e.Event_Start}; 

然后在其中访问它for循环如下:

foreach (var item in events)  
    Email.SendMail(item.email,"Subject",String.Format("Location: {0}",item.location),false); // including all the other variables required and excluding the formatting 
+0

感谢它只是有一个主题字符串的可读性的问题,它的所有加入,我需要它是单独的? – Roo

+0

对不起,你能解释一下,也许是一个例子吗? –

0

如果您正确使用ASP .NET MVC的自动实体映射,它将为您执行所有连接。在会员中,您应该参考Event event而不是Event_ID。那么你可以简单地做:

foreach (var member in db.Members) 
{ 
    String msgBody = "You are invited to " && member.event.Event_Description && " on " && member.event.Event_Start; 

    Email.SendMail(member.Member_Email_Address,"Subject", msgBody, false); 
}