以下LINQ to Entities查询获取来自电子邮件的所有链接点击,并通过URL将它们分组并将其投影到模型中。在LINQ to SQL中对记录进行分组和计数,同时包括来自计数的所有记录
所需的最终结果会是这样的:
Clicks | URL | Clickers
-------------------------------------------------------------------------------------
2 x.com User 1, User 2...
1 y.com User 1
我有一个对象CampaignEmailRecipient
其中包含谁点击了链接,这也是我想在我的财产Clickers
模型,包括所有用户。
我只是不确定如何正确地与我的团队做到这一点,并想知道是否有人能够协助?
我的模型
public class CampaignEmailReportLinksViewModel
{
public int Id { get; set; }
public int CampaignElementId { get; set; }
public string LinkURL { get; set; }
public int QtyClicks { get; set; }
public CampaignEmailRecipient Clickers { get; set; }
}
我查询
public List<CampaignEmailReportLinksViewModel> GetCampaignLinksByElementId(int id, int cid, string user)
{
var items = (from t1 in db.CampaignLinkClicks
where
(t1.CampaignLink.CampaignElementId == id) &&
(t1.CampaignLink.CampaignElement.Campaign.CompanyId == cid)
group new {t1} by new
{
t1.CampaignLink.URL,
t1.CampaignLink.CampaignElementId
}
into g
select new CampaignEmailReportLinksViewModel
{
LinkURL = g.Key.URL,
QtyClicks = g.Count(),
Clickers = ???????????
}).OrderByDescending(x => x.QtyClicks).ToList();
return items.ToList();
}
编辑
CampaignLinkClick看起来是这样的:
public int Id
public int CampaignRecipientId
public string IP
public datetime Timestamp
public int CampaignLinkId
您可以列举CampaignLinkClicks的所有属性吗? – Richthofen
@Richthofen我已将此添加到问题的结尾。 – Nick
谢谢。好吧,我假设CampaignRecipientId指向一个记录,指出谁点击了它?如果您使用EntityFramework和外键,则应该能够使用CampaignLinkClick.CampaignRecipients上的导航属性来获取这些内容。如果你不使用外键,你必须做db.CampaignRecepients.Where(n => n.CampaignRecipientID = t1.CampaignLinkClick.CampaignRecipientID) – Richthofen