我正在尝试执行以下 linq 操作。这里用SQL表示:
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
我用下面的 linq 表达式让它工作:
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);
但问题是 newTable 是一个数据表,它有一个名为 AdGroupID 的数字字段,我需要与一个列表进行连接,以用它的描述替换 AdGroupID 的数字 ID。到目前为止,这是我尝试过的:
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()
};
最佳答案
我使用 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);
它也可以使用 group by 然后加入,没有 from 子句:
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# - 使用 DataTable 和 List<T> 加入和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239807/