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

时间:2014-11-07 15:53:28

标签: c# linq

我使用函数来求和一些字段,但我也必须在函数中使用它们,但我担心它们被计算两次。我担心这会导致将来表现不佳。

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)
                */
           };

1 个答案:

答案 0 :(得分:4)

这些值肯定会被计算两次,因为你已经显示了代码。您需要做一些事情来计算值,将它们存储在某个地方,然后从多个位置重复使用它们。

这里最简单的选项可能是将每个总和存储在局部变量中。如果你真的需要这种匿名类型,那么你可以根据当地人创建它。