2017-07-10 4 views
0

Ich habe diesen StationStateItem Tisch mit diesen Daten:Wie aktualisiert man die Tabelle basierend auf einer anderen Tabelle in EntityFramework?

Id SSHdrRef  Amount 
--------------------------- 
1 1(forrein Key) 1 
2 1    1 
3 2    2 
4 2    2 
5 3    1 

ich StationStateHdr Tabelle aktualisieren möchte, wenn Betrag in StationStateItem geändert.

BeforeSSAmount=StationStateHdr.StationStateItem.Sum(x=> x.Amount) 

StationStateHdr Tabelle wie folgt aus:

Id BeforeSSAmount 
-------------- 
1 0 
2 2 (1+1) 
3 6 (1+1+2+2) 
+2

sollten Sie zuerst versuchen ... Sie immer Fragen und beantwortet keine fragen. –

+1

Sie möchten beide Tabellen richtig aktualisieren .. ?? mach es manuell. Oder atleast Zeigen Sie uns Ihre Objektklassen für diese. Zeigen Sie auch die Funktion, wo Sie Table StationStateItem aktualisieren –

+0

Ich möchte BeforeSSAmount in der StationStateHdr Tabelle aktualisieren, wenn ich Amout in StationStateItem Tabelle ändern und auf Speichern klicken. –

Antwort

1

versuchen diesen Code:

var afters = ctx.headers.SkipWhile(((x, index) => index <= currentItemIndex)) 
       .TakeWhile((x, index) => index != ctx.headers.Count()-1).ToList(); 

      for (int i = currentItemIndex+1, j=0; j < afters.Count; i++ ,j++) 
      { 
       var befores = ctx.headers.TakeWhile((x, index) => index <i); 
       afters[j].BeforeSSAmount = befores.SelectMany(x => x.StationStateItem).Sum(x => x.Amount); 
      } 

Edited für den Einsatz in Wpf Listcollectionview:

var afters = header.DataSource.Cast<StationStateHdr>().SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition)) 
     .TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count()-1).ToList(); 

    for (int i = header.DataSource.CurrentPosition+1, j=0; j < afters.Count; i++ ,j++) 
    { 
     var befores = header.DataSource.Cast<StationStateHdr>().TakeWhile((x, index) => index <i); 
     afters[j].BeforeSSAmount = befores.SelectMany(x => x.StationStateItem).Sum(x => x.Amount); 
    } 

oder diesen Code:

var listOfStationStateHdr = header.DataSource.Cast<StationStateHdr>(); 
    listOfStationStateHdr.SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition)) 
     .TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count() - 1).ToList().ForEach(x => 
    { 
     x.BeforeSSAmount = listOfStationStateHdr.TakeWhile(y => y.Id < x.Id).SelectMany(b => b.StationStateItem).Sum(s => s.Amount); 
    }); 

oder

var sumCurrent = CurrentStationStateHdr.StationStateItem.Sum(t => t.Amount); 
    var listOfStationStateHdr = header.DataSource.Cast<StationStateHdr>().ToList(); 
    double? nextItembeforeSSAmount = listOfStationStateHdr[header.DataSource.CurrentPosition + 1].BeforeSSAmount; 

    listOfStationStateHdr.SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition)) 
     .TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count() - 1).ToList().ForEach(x => 
     { 
      x.BeforeSSAmount += sumCurrent - nextItembeforeSSAmount; 
     }); 
+0

Was ist das? Sie hat nicht einmal die Frage abgeschlossen ?? .. –

+0

danke für Ihre Hilfe aber, was ist currentItemIndex? –

+0

Ich habe benutzerdefinierte WPF DataGridNavigator Control, es hat DataSource-Eigenschaft, die ListCollectionView ist. –

2

Try-Code

foreach(var a in StationStateHdr) 
    { 
    a .BeforeSSAmount=StationStateHdr.StationStateItem.where(c=>c.SSHdrRef<a.id).Sum(x=> x.Amount) 
    } 
Verwandte Themen