0

次の LINQ to Entities クエリは、電子メールからすべてのリンク クリックを取得し、それらを URL でグループ化し、モデルに射影します。

望ましい最終結果は次のようになります。

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
4

1 に答える 1

1

何をしようとしているのかを考えると、SQL は項目を URL でグループ化します。

User  |  URL     
--------------------------------------------------
User1          x.com      
User2          x.com      
User1          y.com   

URL でグループ化すると、次の結果セットが得られるため、user のサブ要素は失われます。

URL     
--------------------------------------------------
x.com      
y.com     

1 つの (かなりコストのかかる) 方法は、各 URL の結果を取得することです。

select new CampaignEmailReportLinksViewModel
                            {
                                LinkURL = g.Key.URL,
                                QtyClicks = g.Count(),
                                Clickers = ""
                            }

foreach(var item in items){
    item.Clickers = db.CampaignLinkClicks
                           .Where(x=>x.Url == item.URL)
                           .Clickers.Select(x=>x.Name).ToString();
}
于 2012-07-03T14:53:08.430 に答える