Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq集团获得总收入的百分比_C#_Linq_Linq To Entities - Fatal编程技术网

C# Linq集团获得总收入的百分比

C# Linq集团获得总收入的百分比,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我的Linq查询遇到了一个问题。基本上我有以下内容,取自LinqPad,它按日期和文本字段类型分组,并给出结果。问题是,对于每个日期,我需要有总值,以及与总值相比蓝色的百分比 var t = (from p in Orders where (p.Type == "Blue" || p.Metric == "Red" || p.Metric == "White") && p.OrderDate>= new DateTime(2014,8,26,0,0,0) orderby p

我的Linq查询遇到了一个问题。基本上我有以下内容,取自LinqPad,它按日期和文本字段类型分组,并给出结果。问题是,对于每个日期,我需要有总值,以及与总值相比蓝色的百分比

var t = (from p in Orders where (p.Type == "Blue" || p.Metric == "Red" || p.Metric == "White")
&& p.OrderDate>= new DateTime(2014,8,26,0,0,0)
orderby p.OrderDate, p.Type
group p by new { p.OrderDate, p.Type} into gd 
select new {OrderDate = gd.Key.OrderDate, Type= gd.Key.Type, Value = gd.Sum(x => x.Value)}).ToList().Dump();
因此,如果我有3行,如下图所示,我需要返回一行:

2014-08-28,蓝色,30 2014-08-28,红色,25 2014-08-28,怀特,95岁 我追求的结果是:

2014-08-28,蓝色,0.2 0.2是单个日期的蓝色条目百分比。当然,如果有多个日期,我需要每个日期一行:-

这让我头疼,所以任何指点都将不胜感激。像往常一样,我先在谷歌和这里搜索,但几次尝试后,我决定询问


谢谢

尝试在一个查询中完成这一切是相当困难的!我建议您创建两个不同的集合,一个用于现有集合,另一个按日期分组,而不考虑颜色

接下来,我将按日期加入这两组


如果有必要,我将使用一个示例。

非常确定您必须进行连接才能获得所需的数据,因为我们在技术上处理两组数据,一组数据仅按OrderDate分组,另一组数据按OrderDate分组,然后键入

请注意,这一点也不整洁。。。所以请谨慎使用,我还希望对这样的代码有详细的注释,因为它完全不可读

var orderPercent = orders
    .GroupBy(x => x.OrderDate)
    .Join(
        orders.GroupBy(y => new { y.OrderDate, y.Type }),
        x => x.Key,
        y => y.Key.OrderDate,
        (a, b) => new { Date = a.Key, Type = b.Key.Type, Percent = (double)b.Sum(x => x.Value) / (double)a.Sum(x => x.Value) }
    ).ToList();

谢谢,你当然是对的,没有评论很难维持。@Dominik是的,这是一种奇怪的情况,LINQ很难看,但仍然可能?比使用循环更整洁。