2016-06-11 99 views
0
我在下面的查询有困难

比较的结果是如何添加,如果其他人在选择块我也想一些更好的方式来写下面的查询LINQ的计算平均,总在查询

var x = csvParser.ParseCsv(@"data.csv"); 
var unsettledCustomers = x.GroupBy(g=>g.Id). 
    Select(gg =>new 
    { 
     Id=g.Key, 
     Total=g.Sum(xx=>xx.Stake), 
     Avg=g.Average(ss=>ss.Win) 
    }); 
+1

'x.GroupBy(G => g.Id).' - 什么是标识?您没有将它列在您的CVS数据中。 – Igor

+0

它是csv数据中的customerId第一个值 –

+0

'bet' ='stake'?或者他们是两个不同的东西? – Igor

回答

2
var unsettledCustomers = x.GroupBy(g => g.Id) 
    .Select(g => new 
    { 
     Id = g.Key, 
     Total = g.Sum(xx => xx.Stake), 
     Avg = g.Average(ss => ss.Win), 
     AvgerageBet = g.Average(ss => ss.Stake), 
     UnusualBets = g.Where(bet => bet.Stake > (10 * g.Average(ss => ss.Stake))).ToList() 
    }); 

var allUnusualBets = unsettledCustomers.SelectMany(y => y.UnusualBets); 

你贴出的问题:

我想找出投注,其中股份(BET)高于该客户的平均投注在他们的BETT 10倍以上ing历史...

您的数据在哪里Id =客户ID。请注意,根据您在问题中定义的内容,不存在平均赌注* 10高于下注的情况,因此样本数据中没有异常投注。

ID:1,AverageBet:400,AverageBetTimes10:4000,最高下注:1000

ID:2,AverageBet:15,AverageBetTimes10:150,最高下注:20

ID:3, AverageBet:110,AverageBetTimes10:1100,最高下注:300

ID:4,AverageBet:237.5,AverageBetTimes10:2375,最高下注:300

ID:5,AverageBet:73.3333333333333,AverageBetTimes10:733.333333333 333,最高下注:100

编号:6,AverageBet:162.5,AverageBetTimes10:1625,最高下注:500

+0

另外一个问题,我应该使用EventID groupby –

+0

@Santosh - 你没有在你的问题中提及有关EventID的任何信息,所以我没有使用它。如果这很重要,则需要使用什么EventID更新您的问题,以及如何使用它来过滤数据。 – Igor

+0

如何从上述查询中检索不寻常的投注? –