0
votes

Comment boucle via les propriétés du type anonyme dans une liste

Si j'ai la requête LINQ suivante:

2018  1   100.00
2018  1   1500.00
2018  1   80.00
2018  1   5040.00
2018  1   60.00
2018  1   
2018  1   30.52
2018  1   
2018  1   0.36
2018  1   0.36
2018  1
2018  1   


15 commentaires

Avez-vous essayé exceptionnel datatotaldata .tolist (); ?


@viveknuna Les propriétés ne sont pas les mêmes


Liste Totaux = exceptionnelleDatatotaldata.select (x => Nouveau réglageTotal () {salyear = x.salyear, salmonth = x.salmonth, valeur = x.ajustment_value}). Tolist ();


@jdweng: valeur n'est pas toujours = réglage_value


Vos chèques NULL peuvent être réduits à montant_uite = T2? ["Montant_uite"]. Tostring () ?? "" . Si vous travaillez avec des datables dactylographiques, il peut être encore réduit en rendant la colonne une chaîne et en réglant la nullvalue à vide, puis il ne jette pas sur NULL


Utilisez le même code et définissez la valeur sur tout ce qu'il devrait être.


@Caiusjard: belle note


la valeur n'est pas toujours = Réglage_valu - Dans ce cas, apportez le réglage du code nécessaire, comme valeur = somelogic? S.AdJustment_value: S.Ather_Value Je ne pense pas que fait pourrait être discerné de ce qui a été posté


@JDWENG: la valeur de valeur mai = réglage_value ou montant_uite_out_out_out_out_out_out_out_out_out_out_out_out_out_out_out_out ou diff_uite ou Exchange_rate en fonction de l'exemple ci-dessus


@CAIUSJARD Il est basé sur les itérations non sur une logique spécifique que l'exemple ci-dessus.


Je ne t'ai pas vraiment eu. Je vois qu'il y a plus d'articles dans votre liste que vous ne réclamez vos sorties de requête, mais ce n'est pas évident pourquoi. Pouvez-vous ajouter plus d'explication?


Oh. Je pense que je l'obtiens; C'est comme l'impapot de n propriétés dans n rangées d'une propriété. Vous devriez rendre votre vie facile; Ne les tirez pas aux propriétés en premier lieu


@CAIUSJARD La requête SQL renvoie ce résultat et je souhaite que toutes les valeurs de ces propriétés répertoriées dans une propriété trichée en fonction des itérations comme exemple.


@Caiusjard exactement = impapot, je ne me souvenais pas de la terminologie: D


Suggestion - Si vous réduisez l'indentation, le code s'adaptera à l'écran. Mettez en surbrillance ces lignes dans VS et SHIFT + TAB.


3 Réponses :


1
votes
outstandingDataTotalData.Select(s => new AdjustmentTotal {
    SalYear = s.SalYear,
    SalMonth = s.SalMonth,
    Value = s.adjustment_value
}).ToList();

0 commentaires

1
votes

Facilitez votre vie, n'extraitez pas les propriétés séparées. Effectuez l'extrait comme une matrice: xxx pré>

} p>

de sorte que vous vous retrouvez avec un objet avec 3 propriétés, deux cordes salxxx et une gamme de chaînes (les autres valeurs) . Le tableau des chaînes signifie que vous pouvez utiliser la linq Selectmany pour l'aplatir. Vous verrez dans l'exemple MSDN qu'ils ont des propriétaires avec des listes d'animaux domestiques (nombre variable d'animaux domestiques, mais vos valeurs sont un nombre fixe) et après SelectMany, il est aplatie dans une liste où le propriétaire se répète et il y a un animal de compagnie. Les valeurs de vos mocassasses sont les animaux domestiques, les valeurs Salxxx sont les propriétaires p>

une fois que vous avez obtenu une requête de travail, vous pouvez réellement l'intégrer à la première requête. P>

Désolé de ne pas avoir publié Exemple (et j'ai sauté les chèques nuls pour la clarté) - Le code est très difficile à utiliser sur un téléphone portable p>


éditer: p>

Alors, vous dites que vous voulez que les résultats dans un ordre particulier. Select et SelectMany ont à la fois une version où ils donneront l'index de l'élément et nous pouvons l'utiliser .. Parce que vous voulez essentiellement avoir ces objets: P>

obj.SelectMany((theOuter, outerIdx) =>
  theOuter.C.Select((theInner, innerIdx) => 
    new { 
      SalYear = theOuter.SalYear, 
      SalMonth = theOuter.SalMonth, 
      DataItem = theInner, 
      OuterIdx = outerIdx,
      InnerIdx = innerIdx
    }
  )
).OrderBy(newObj => newObj.InnerIdx).ThenBy(newObj => newObj.OuterIdx)


2 commentaires

Il y a un petit problème ici, je veux t2 ["réglage_value"] puis t2 ["réglage_value"] à partir du second tableau et après que `t2 [" montant_outent "] CODE> ALORS T2 ["Montant_OUTSE"] `Du deuxième tableau et ainsi de suite. Ce code résolve la moitié du problème


Que puis-je dire! Tu es brillant, juste incroyable. Merci beaucoup, je suis vraiment reconnaissant de votre magie.



1
votes

Utilisez un EUM:

    class Program
    {

        static void Main(string[] args)
        {


            List<AdjustmentTotal> totals = new List<AdjustmentTotal>();
            for (int i = 0; i < (int)VALUE.END; i++)
            {
                foreach (var data in outstandingDataTotalData)
                {
                    AdjustmentTotal total = new AdjustmentTotal();
                    totals.Add(total);
                    total.SalMonth = data.SalMonth;
                    total.SalYear = data.SalYear;
                    total._Type = (VALUE)i;
                    switch ((VALUE)i)
                    {
                        case VALUE.adjustment_value :
                            total.Value = data.adjustment_value;
                            break;
                        case VALUE.amount_outstanding:
                            total.Value = data.amount_outstanding;
                            break;
                        case VALUE.amount_outstanding_ded:
                            total.Value = data.mount_outstanding_ded;
                            break;
                        case VALUE.amount_outstanding_priv:
                            total.Value = data.amount_outstanding_priv;
                            break;
                        case VALUE.diff_outstanding:
                            total.Value = data.diff_outstanding;
                            break;
                        case VALUE.exchange_rate:
                            total.Value = data.exchange_rate;
                            break;
                    }
                }
            }
        }
    }
    public enum VALUE
    {
        adjustment_value = 0, 
        amount_outstanding = 1, 
        amount_outstanding_priv = 2, 
        amount_outstanding_ded = 3, 
        diff_outstanding = 4, 
        exchange_rate = 5,
        END = 6
    }    
    public class AdjustmentTotal
    {
        public string SalYear { get; set; }

        public string SalMonth { get; set; }

        public string Value { get; set; }

        public VALUE _Type { get; set; }
    }


0 commentaires