J'utilise un OMS qui stocke jusqu'à trois éléments de ligne par enregistrement dans la base de données.LINQ Normaliser les données
Voici un exemple d'une commande contenant cinq éléments de ligne.
Order Header
Order Detail
Prod 1
Prod 2
Prod 3
Order Detail
Prod 4
Prod 5
Un enregistrement d'en-tête de commande et deux enregistrements de détail.
Mon but est d'avoir une relation un-à-un pour les enregistrements de détails (c'est-à-dire, un enregistrement de détail par élément de ligne). Dans le passé, j'ai utilisé une instruction SQL UNION ALL
pour extraire les données. Y a-t-il une meilleure approche à ce problème en utilisant LINQ?
Voici ma première tentative d'utilisation de LINQ. Tous les commentaires, suggestions ou recommandations seraient grandement appréciés. Pour ce que j'ai lu, une déclaration UNION
peut taxer le processus?
var orderdetail =
(from o in context.ORDERSUBHEADs
select new {
edpNo = o.EDPNOS_001, price = o.EXTPRICES_001,
qty = o.ITEMQTYS_001 }
).Union(from o in context.ORDERSUBHEADs
select new { edpNo = o.EDPNOS_002, price = o.EXTPRICES_002,
qty = o.ITEMQTYS_002 }
).Union(from o in context.ORDERSUBHEADs
select new { edpNo = o.EDPNOS_003, price = o.EXTPRICES_003,
qty = o.ITEMQTYS_003 });
Les noms 'E ..._ 00n' sont-ils fixés sous cette forme? Et que se passe-t-il s'il y en a moins de trois? valeurs null? – tzaman
Oui, les colonnes des tables sont fixées avec _00n. Le schéma a été migré à partir d'une base de données HPe3000 IMAGE prenant en charge les types de données sous la forme de tableaux. Le détail au niveau de l'article était stocké dans des tableaux. Si un seul élément de ligne est présent, l'ID d'élément pour les deux autres valeurs sera zéro. La même chose s'applique au prix et à la quantité. Il n'y a aucune chance pour une valeur nulle. Les colonnes ont des valeurs par défaut de zéro ou d'espaces. Le raisonnement derrière tout cela était de gagner de la place dans la journée. Les concepteurs ont pris le nombre le plus commun d'éléments de campagne sur une commande et créé le schéma de détail de la commande. Merci, Brennan –