Linq SQL FirstOrDefault

时间:2012-01-25 19:41:39

标签: sql linq

我是否应始终使用FirstOrDefault来显示未包含在聚合函数中的列?

 var creditos = from c in context.creditos
                       where c.Status == status
                       join a in context.acreditados on c.IDCredito equals a.IDCredito
                       group a by a.IDCredito into g
                       select new
                       {
                           Id = g.FirstOrDefault().creditos.IDCredito,
                           Expediente = g.FirstOrDefault().creditos.Expediente,
                           Status = (_Credito.Status)g.FirstOrDefault().creditos.Status,
                           Producto = (_Credito.Producto)g.FirstOrDefault().creditos.Producto,
                           Monto = g.Sum(Monto => Monto.Cantidad),
                           Fecha = g.FirstOrDefault().creditos.FechaInicio,
                           Tasa = g.FirstOrDefault().creditos.TasaInteres,
                           Plazo = g.FirstOrDefault().creditos.Plazo,
                           Periodo = g.FirstOrDefault().creditos.Periodo
                       };

2 个答案:

答案 0 :(得分:1)

不,不是真的:你可以使用LastOrDefault。重要的是获得单个值以与聚合中生成的标量“配对”。

另一种方法是将这些值放在按键分组中:如果您知道它们是相同的,请将它们添加到组的键中,然后在聚合阶段将它们从那里拉出来。

var creditos = from c in context.creditos
                   where c.Status == status
                   join a in context.acreditados on c.IDCredito equals a.IDCredito
                   group a by new {a.IDCredito, a.FechaInicio, a.TasaInteres, a.Plazo, a.Periodo } into g
                   select new
                   {
                       Id = g.FirstOrDefault().creditos.IDCredito,
                       Expediente = g.FirstOrDefault().creditos.Expediente,
                       Status = (_Credito.Status)g.FirstOrDefault().creditos.Status,
                       Producto = (_Credito.Producto)g.FirstOrDefault().creditos.Producto,
                       Monto = g.Sum(Monto => Monto.Cantidad),
                       Fecha = g.Key.FechaInicio,
                       Tasa = g.Key.TasaInteres,
                       Plazo = g.Key.Plazo,
                       Periodo = g.Key.Periodo
                   };

答案 1 :(得分:0)

不,您可以使用任何您喜欢的聚合功能。 Min,Max,Sum等