C# 如果没有具有相应实体的值,Linq将返回数据
查询示例:C# 如果没有具有相应实体的值,Linq将返回数据,c#,linq,C#,Linq,查询示例: var results = await campaignList .GroupBy(x => x.Campaign) .Select(c => new ReportModel { CampaignId = c.Key.Id, CoregName = c.Key.Name, TotalVisitors = startDate == null ||
var results = await campaignList
.GroupBy(x => x.Campaign)
.Select(c => new ReportModel
{
CampaignId = c.Key.Id,
CoregName = c.Key.Name,
TotalVisitors = startDate == null || endDate == null ? c.Key.LogPixelCalls.Count : c.Key.LogPixelCalls.Count(x => x.CreatedOn >= startDate && x.CreatedOn <= endDate),
TotalUsers = c.Count(),
TotalPaidUsers = c.Count(x => x.UserSignature.StripeCustomerId != null),
TotalUserConversion = !c.Any() || c.Key.LogPixelCalls.Count == 0 ? 0 : (decimal)c.Count() / (decimal)c.Key.LogPixelCalls.Count * 100,
TotalPaidUserConversion = c.Count(x => x.UserSignature.StripeCustomerId != null) == 0 || !c.Any() ? 0 : (decimal)c.Count(x => x.UserSignature.StripeCustomerId != null) / (decimal)c.Count() * 100
})
.OrderByDescending(c => c.TotalPaidUsers)
.ToListAsync();
首先对活动数据进行分组/求和,然后将分组结果加入到活动中
var cd = campaigns.GroupBy (c => new {c.ID} ).Select (cp =>
new {
cId= cp.Key.ID,
TotalUsers = cp.Count(),
TotalSum= cp.Sum( x=>x.UsersByCampaign)
...
} );
var results = campaignList.ForEach( cl => cd.Where( cdd => cdd.cId == cl.Id)
.Select(cdd => new { CampaignId = cdd.CId, TotalVisitors = cdd.TotalUsers , .. })
.DefaultIfEmpty( new { CampaignId = cdd.CId, TotalVisitors =0 , .. });
首先对活动数据进行分组/求和,然后将分组结果加入到活动中
var cd = campaigns.GroupBy (c => new {c.ID} ).Select (cp =>
new {
cId= cp.Key.ID,
TotalUsers = cp.Count(),
TotalSum= cp.Sum( x=>x.UsersByCampaign)
...
} );
var results = campaignList.ForEach( cl => cd.Where( cdd => cdd.cId == cl.Id)
.Select(cdd => new { CampaignId = cdd.CId, TotalVisitors = cdd.TotalUsers , .. })
.DefaultIfEmpty( new { CampaignId = cdd.CId, TotalVisitors =0 , .. });
我喜欢这样:
var resultsWithEmtpyCampaigns = campaigns.GroupJoin(
results,
camp => camp.Id,
campResult => campResult.CampaignId,
(x, y) => y.Select(c => new ReportModel
{
CampaignId = y.FirstOrDefault().CampaignId,
CoregName = y.FirstOrDefault().CoregName,
TotalVisitors = y.FirstOrDefault().TotalVisitors,
TotalUsers = y.FirstOrDefault().TotalUsers,
TotalPaidUsers = y.FirstOrDefault().TotalPaidUsers,
TotalUserConversion = y.FirstOrDefault().TotalUserConversion,
TotalPaidUserConversion = y.FirstOrDefault().TotalPaidUserConversion,
ReportCountryList = y.FirstOrDefault().ReportCountryList
})
.DefaultIfEmpty(new ReportModel
{
CampaignId = x.Id,
CoregName = x.Name,
TotalVisitors = 0,
TotalUsers = 0,
TotalPaidUsers = 0,
TotalUserConversion = 0,
TotalPaidUserConversion = 0
}))
.SelectMany(g => g).ToList();
return
resultsWithEmtpyCampaigns;
我喜欢这样:
var resultsWithEmtpyCampaigns = campaigns.GroupJoin(
results,
camp => camp.Id,
campResult => campResult.CampaignId,
(x, y) => y.Select(c => new ReportModel
{
CampaignId = y.FirstOrDefault().CampaignId,
CoregName = y.FirstOrDefault().CoregName,
TotalVisitors = y.FirstOrDefault().TotalVisitors,
TotalUsers = y.FirstOrDefault().TotalUsers,
TotalPaidUsers = y.FirstOrDefault().TotalPaidUsers,
TotalUserConversion = y.FirstOrDefault().TotalUserConversion,
TotalPaidUserConversion = y.FirstOrDefault().TotalPaidUserConversion,
ReportCountryList = y.FirstOrDefault().ReportCountryList
})
.DefaultIfEmpty(new ReportModel
{
CampaignId = x.Id,
CoregName = x.Name,
TotalVisitors = 0,
TotalUsers = 0,
TotalPaidUsers = 0,
TotalUserConversion = 0,
TotalPaidUserConversion = 0
}))
.SelectMany(g => g).ToList();
return
resultsWithEmtpyCampaigns;
检查我的编辑,尝试使用GroupJoin,但从活动组c中的c获取空引用errorvar counts=by;var resultinho=来自活动列表中的cl加入c在cl上的计数。活动id等于c.id….您能在lambda linq中写入此值吗?检查我的编辑,尝试使用GroupJoin,但获取空引用错误var counts=来自活动c组中的c通过;var resultinho=来自活动列表中的cl在cl上加入c计数。活动id等于c.id…您能用lambda linq写这个吗?