2012-01-25 93 views
1

我是否總是需要使用FirstOrDefault來顯示不包含在集合函數中的列?Linq SQL 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 
         }; 

回答

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 
        }; 
+0

當使用Single,SingleOrDefault時,我得到以下結果:「'Single'和'SingleOrDefault'方法只能用作最終的查詢操作,考慮在這個方法中使用方法'FirstOrDefault'而不是實例。「 –

+0

@JorgeZapata對不起,我沒有意識到你在做linq2sql或EF,所以我提到了Single/SingleOrDefault錯誤。不過,我認爲將數據放入密鑰的解決方案更加優雅。它會爲你產生相同的結果嗎? – dasblinkenlight

+0

是的,我得到相同的結果,我也發現更優雅。謝謝! –

0

不,你可以使用任何你喜歡的聚合函數。 Min,Max,Sum等

相關問題