Reputation: 13
Im having a problem using Email.SendMail(). I need to add more details like Event_Location, Event_Start, etc to the "Email Msg" from the Events table in the database but the var item is already called by events. I would like to know if there is a way to put two var i.e events and members either in the foreach loop or another method?
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);
}
Model Class for Member
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; }
}
Model Class for Event
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; }
Upvotes: 1
Views: 1085
Reputation: 7012
If you use ASP .NET MVC's automatic entity mapping properly, it will do all the joins for you. In Member you should have a reference to Event event
rather than Event_ID
. Then you can simply do:
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);
}
Upvotes: 0
Reputation: 5119
you can use an anonymous method to return only those properties you want, i.e.:
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};
and then access it in the for loop like so:
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
Upvotes: 1