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# 如何重用已计算的匿名属性_C#_Linq - Fatal编程技术网

C# 如何重用已计算的匿名属性

C# 如何重用已计算的匿名属性,c#,linq,C#,Linq,我用一个函数对一些字段求和,但我也必须在函数中使用它们,但我担心它们会被计算两次。我担心这会导致未来的糟糕表现 var a = dataTable.AsEnumerable(); var test = new { contadorSolucao = a.Sum(x => x.Field<int>("ContadorSolucao")), contadorAssunto = a.Sum(x =>

我用一个函数对一些字段求和,但我也必须在函数中使用它们,但我担心它们会被计算两次。我担心这会导致未来的糟糕表现

var a = dataTable.AsEnumerable();
var test = new
           {
               contadorSolucao = a.Sum(x => x.Field<int>("ContadorSolucao")),
               contadorAssunto = a.Sum(x => x.Field<int>("ContadorAssunto")),
               contadorAbertura = a.Sum(x => x.Field<int>("ContadorAbertura")),
               contadorMaquinas = a.Sum(x => x.Field<int>("ContadorMaquinas")),
               contadorChamados = a.Sum(x => x.Field<int>("ContadorChamados")),                                               

                // How can I reuse these fields above (contadorSolucao, contadorAssunto...) instead of below?
                // I suppose these fiels are been recalculated twice. How can I avoid this?
                porcentagemSolucao = MyFunction(a.Sum(x => x.Field<int>("ContadorSolucao")),
                                                        a.Sum(x => x.Field<int>("ContadorMaquinas")),
                                                        a.Sum(x => x.Field<int>("ContadorAssunto")), 
                                                        a.Sum(x => x.Field<int>("ContadorNaoPodemSolucaoRemota")))

                /* This don't work
                porcentagemSolucao = MyFunction(contadorSolucao, contadorAssunto, contadorAbertura, contadorMaquinas, contadorChamados)
                */
           };
var a=dataTable.AsEnumerable();
var测试=新
{
contadorSolucao=a.Sum(x=>x.Field(“contadorSolucao”)),
contadorassto=a.Sum(x=>x.Field(“contadorassto”),
contadorAbertura=a.Sum(x=>x.Field(“contadorAbertura”),
contadorMaquinas=a.Sum(x=>x.Field(“contadorMaquinas”),
contadorChamados=a.Sum(x=>x.Field(“contadorChamados”),
//我如何重用上面的字段(contadorSolucao、ContadorAssto…)而不是下面的字段?
//我想这些领域已经重新计算过两次了。我怎样才能避免这种情况呢?
PorcentageMolucao=MyFunction(a.Sum(x=>x.Field(“ContadorSolucao”)),
a、 总和(x=>x.Field(“ContadorMaquinas”),
a、 总和(x=>x.Field(“contadorassto”),
a、 总和(x=>x.Field(“ContadorNaoPodemSolucaoRemota”))
/*这不管用
PorcentageMolucao=MyFunction(contadorSolucao、ContadorAssto、contadorAbertura、contadorMaquinas、contadorChamados)
*/
};

如您所示,这些值肯定会计算两次。您需要做一些事情来计算这些值,将它们存储在某个位置,然后从多个位置重新使用它们


这里最简单的选择可能是将每个和存储在局部变量中。如果您确实需要此匿名类型,则可以基于这些局部变量创建它。

使用这些计算属性以及原始数据创建其他匿名对象,然后再创建另一个
选择
或其他任何东西。。它必须是匿名对象吗?创建一个具体的类来处理这个.Tks!我以前做过,但我认为我可以在同一表达式中重复使用它们,但如果不可能,我将遵循您的建议;)