i build code with your business logic.
OrganizationServiceContext orgContext = new OrganizationServiceContext(organizationService);
var myLinqQuery = from emailEntity in orgContext.CreateQuery("email")
join activityPartyEntity in orgContext.CreateQuery("activityparty")
on emailEntity["activityid"] equals activityPartyEntity["activityid"]
join queueEntity in orgContext.CreateQuery("queue")
on activityPartyEntity["activityid"] equals queueEntity["queueid"]
where(emailEntity["directioncode"]).Equals(true)
where((int) emailEntity["statuscode"]).Equals(3) ||
((int) emailEntity["statuscode"]).Equals(4)
orderby(emailEntity["modifiedon"]) descending
select new {
subject = emailEntity.GetAttributeValue < string > ("subject"),
regardingobjectid = emailEntity.GetAttributeValue < EntityReference > ("regardingobjectid"),
sender = emailEntity.GetAttributeValue < EntityCollection > ("from"),
to = emailEntity.GetAttributeValue < EntityCollection > ("to"),
statuscode = emailEntity.GetAttributeValue < OptionSetValue > ("statuscode"),
modifiedon = emailEntity["modifiedon"],
activityid = emailEntity["activityid"],
};
StringBuilder builder = new StringBuilder();
foreach(var results in myLinqQuery) {
builder.Append("============================================" + "\n");
builder.Append(" modifiedon: " + results.subject + "\n");
if (results.regardingobjectid != null) {
builder.Append(" regarding: " + results.regardingobjectid.Name + "\n");
} else {
builder.Append(" regarding: none" + "\n");
}
foreach (var sendItem in results.sender.Entities)
{
builder.Append(" sender: " + sendItem.GetAttributeValue<string>("addressused") + "\n");
}
foreach (var receiveItem in results.to.Entities)
{
builder.Append(" receiver: " + receiveItem.GetAttributeValue<string>("addressused") + "\n");
}
builder.Append(" statuscode: " + results.statuscode.Value + "\n");
builder.Append(" modifiedon: " + Convert.ToDateTime(results.modifiedon).ToString("d") + "\n");
builder.Append(" activityid: " + results.activityid + "\n");
builder.Append("============================================");
}
Console.WriteLine(builder.ToString());
also pay attention to lookup field, partylist field.