2016-10-22 5 views
0

Ich habe Stunden damit verbracht, einen Weg zu finden, Elemente in das Objekt in meiner Liste einzufügen. Das habe ich gemacht.C# - Hinzufügen eines Objekts zu einem bestimmten Index in der Liste

data = await (from iw in _context.InvestorWallets 
           join m in memberdata on iw.investorid equals m.id 
           where _context.InvestorDeposit.Any(item => item.investordepositid == iw.transactionid) || 
          _context.InvestorWithdrawal.Any(item => item.withdrawalid == iw.transactionid) || 
          _context.InstallmentPaymentDistribution.Any(item => item.paymentdistributionid == iw.transactionid) 
           select new InvestorWalletsViewModel() 
           { 
            username = m.userName, 
            fullname = m.fullName, 
            isActive = m.isActive, 
            memberType = m.memberType, 
            memberTypeName = m.memberTypeName, 
            emailAddress = m.emailAddress, 
            trxdate = iw.trxdate, 
            trxdesc = iw.trxdesc, 
            debit = iw.acounttype.ToLower() == "db" ? iw.amount : 0, 
            credit = iw.acounttype.ToLower() == "cr" ? iw.amount : 0, 
            investorid = iw.investorid, 
            investorwalletid = iw.investorwalletid, 
            transactiontype = 
            (
             iw.transactiontype.ToLower() == "dep" ? "Deposit" : 
             iw.transactiontype.ToLower() == "wit" ? "Withdrawal" : 
             iw.transactiontype.ToLower() == "rep" ? "IB-1610043 - Repayment" : "REGULER" 
            ), 
            paymentdistributionid = 
            (
             iw.transactiontype.ToLower() == "rep" ? iw.transactionid??0 : 0 
            ), 
            details = new List<InvestorWalletsViewModelDetail>(), // <-- I want to insert some object to this list 
            previousbalance = iw.previousbalance 
           }).Distinct().ToListAsync(); 

//This is to retrieve data from another table, based on data 
var data2 = (from i in _context.InstallmentPaymentDistributionDetails.Where(p => p.amount > 0) 
          where data.Any(d => d.paymentdistributionid == i.paymentdistributionid) 
          select i).Distinct().ToList(); 

//I used ForEach to itterate through the List, and fill the object 
data2.ForEach(d => 
{ 
    var x = data.Find(z => z.paymentdistributionid == d.paymentdistributionid); 
    if (x == null) return; 

//This is where I insert the value to the List 
    x.details.Add(new InvestorWalletsViewModelDetail //This code right here, it insert the value to all rows in the List, i just want to add the value to the specific row in the List 
    { 
     actualpayment = d.amount, 
     installmentfeetype_name = d.installmentfeetype_name 
    }); 
}); 

}

Wie Sie auf meiner FürJeden sehen können, füge ich den Wert auf die Details (Liste innerhalb List). Aber was gefappelt ist, es hat den Wert in die Liste eingefügt, aber es hat den Wert ALL Zeile in der Liste eingefügt, wenn es nur den Wert in die bestimmte Zeile/den Index einfügen soll. Ich möchte nur den Wert in die spezifische Zeile in der Liste einfügen.

Anyhelp versteht Jungs werden,

Dank

+1

Iterieren durch die Liste data2 notwendig, um das Objekt zu füllen ?? Ist es nicht möglich, den Datensatz aus der Liste data2 zu finden und den Wert aus dem Objekt zu setzen, ohne ihn zu durchlaufen? – gkb

+0

hmm, meinst du ohne foreach? – Webster

+0

Yess ... einfach schnappen Sie sich die Zeile und fügen Sie das Objekt ... – gkb

Antwort

0

Könnte Ihre Liste zu einem Arraylist konvertieren und dann die in Verfahren gebaut verwenden zu einem bestimmten Index einfügen.

ArrayList arrayList = new ArrayList(list); 
arrayList.insert(index, val); 
+0

gefüllt Entschuldigung , nicht so bro – Webster

+0

welche bedingung suchen sie in ihrer liste, wenn sie den wert eingeben? –

0

Wie wäre es mit Skip() und Take()?

Sie überspringen die Anzahl der Zeilen, die Sie auslassen möchten, und dann 1 Element. Dadurch erhalten Sie eine Liste Ihres Objekts, das ein Element enthält.

Die Erweiterung ToList() ist möglicherweise nicht erforderlich.

+0

Die Zeile sollte basierend auf einer übereinstimmenden Bedingung wie - d.paymentdistributionid == i.paymentdistributionid abgerufen werden. Und nicht um einen Offset-Wert ... wie würden Sie den yourRowIndex dynamisch ändern, um die genaue Zeile zu holen ?? – gkb

Verwandte Themen