2014-06-16 14 views
5

Tôi đang cố thực hiện thao tác LINQ sau. Ở đây thể hiện dưới dạng SQL:Tham gia và Nhóm bằng, sử dụng DataTable và Danh sách <T>

SELECT 
    CAMPAIGN, 
    ADGROUPID, 
    CLICKS, 
    TOTALCONV, 
    COST, 
    COSTCONVCLICK, 
    KEYWORD, 
    COUNT(*) AS APARICIONES 
FROM 
    ADWORDSSEARCH 
GROUP BY CAMPAIGN,adgrOUPID,CLICKS,TOTALCONV,COST,COSTCONVCLICK,KEYWORD 
ORDER BY CLICKS DESC 

tôi đã nhận nó làm việc với các biểu thức LINQ sau:

var filtro =(from r in newTable.AsEnumerable() 
      group r by new { 
           camp=r.Field<string>("CAMPAIGN"), 
           keyw= r.Field<string>("KEYWORD") 
          } 
      into grouping 
      select new 
      { 
       grouping.Key.camp, 
       grouping.Key.keyw, 
       Key = grouping.Key, 
       NumberGroup = grouping.Count() 
      }).ToList() 
       .OrderByDescending(t=>t.NumberGroup); 

Nhưng vấn đề là newTable là một DataTable và nó có một lĩnh vực được gọi adgroupid đó là số, và Tôi cần phải tham gia với Danh sách để thay thế ID số của AdGroupID bằng mô tả của nó. Đây là những gì tôi đã cố gắng cho đến nay:

var filtro = from r in newTable.AsEnumerable() 
      join anuncios in adslist.AsEnumerable() 
      on r.Field<string>("ADGROUPSID") equals anuncios.id.toString() 
      into grouping 
      select new 
      { 
       Campaign = r.Field<string>("CAMPAIGN"), 
       AdsName = anuncios.name ???? ->Here is the problem 
       keyword = r.Field<string>("KEYWORD"), 
       Counting = grouping.Count() 
      }; 

Trả lời

1

tôi nhận nó làm việc sử dụng from d in grouping.DefaultIfEmpty()

   var filtro = (from r in newTable.AsEnumerable() 
          join anuncios in adslist.AsEnumerable() on r.Field<string>("ADGROUPID") equals anuncios.id.ToString() into grouping 
          from d in grouping.DefaultIfEmpty() 
          select new 
           { 

            Campaign = r.Field<string>("CAMPAIGN"), 
            AdName = d.name, 
            Clicks = r.Field<string>("CLICKS"), 
            TotalConv = r.Field<string>("TotalConvValue"), 
            Cost = r.Field<string>("Cost"), 
            CostConvClick = r.Field<string>("CostConvertedClick"), 
            keyword = r.Field<string>("KEYWORD"), 
            Counting = grouping.Count() 
           }).ToList().OrderByDescending(t => t.Clicks); 

Nó cũng đang làm việc sử dụng nhóm bằng và sau đó tham gia, nếu không có sự từ khoản:

List<AdwordsClass> filtro = (from r in newTable.AsEnumerable() 
            group r by new{ camp=r.Field<string>("CAMPAIGN"), id=r.Field<string>("adgroupid"), keyw= r.Field<string>("KEYWORD")} into grouping 
            join anuncios in adslist.AsEnumerable() on grouping.FirstOrDefault().Field<string>("ADGROUPID") equals anuncios.id.ToString() 
               select new AdwordsClass() 
            { 
             CampaignName = grouping.Key.camp, 
             CampaignId = Convert.ToInt64(grouping.FirstOrDefault().Field<string>("CAMPAIGNID")), 
             AdsGroupID = grouping.Key.id, 
             KeyWord = grouping.Key.keyw, 
             AdsGroupName = anuncios.name, 
             clicks = grouping.FirstOrDefault().Field<string>("CLICKS"), 
             TotalConv = grouping.FirstOrDefault().Field<string>("TotalConvValue"), 
             Cost =grouping.FirstOrDefault().Field<string>("Cost"), 
             CostConvClick =grouping.FirstOrDefault().Field<string>("CostConvertedClick"), 
             Counting = grouping.Count() 
            }).ToList().OrderByDescending(t => t.clicks).ToList(); 
Các vấn đề liên quan