2017-05-13 1 views
4

j'ai une structure de table dans mon DB comme ceci:Groupe LINQ en effectuant rejoindre sur plusieurs tables/classes

Items <= User => Transactions 

Donc, en C# cartographié les classes utilisateur contient une collection d'articles et transactions ... (1 à plusieurs) ..

Alors maintenant ce que je l'ai fait suit:

var filteredProducts = ctx.Transactions.Where(x => x.SearchedUserID == 
    firstRequest.SearchedUserID) 
    .OrderByDescending(x => x.TransactionDate) 
    .GroupBy(x => x.TransactionID).Select(x => new ResultItem() 
    { 
    TransactionID = x.Key, 
    SaleNumber = x.Sum(y => y.QuantityPurchased)     
    }) 
    .ToList(); 

comme vous pouvez le voir, je suis le regroupement des données dans le tableau des transactions ... maintenant, ce que je voudrais faire ici, si c'est possible, un moyen facile de parcourir la table User dans la table Items et sélectionnez une propriété spécifique dont j'ai besoin pour cet élément groupé, qui est CurrentPrice, et la table Transactions ne contient pas ces données ...

l'instruction select Je voudrais sortir la propriété CurrentPrice comme ceci:

.Select(x => new ResultItem() 
     { 
     TransactionID = x.Key, 
     SaleNumber = x.Sum(y => y.QuantityPurchased), 
     CurrentPrice = // somehow go to Items table and pick up this data 
     }) 
     .ToList(); 

Quelqu'un peut-il m'aider?

+0

Est-ce que 'Transactions' fait référence à' Items'? Disons qu'un client a acheté en tout 4 articles, 2 articles A, 1 article B et 1 article C. En outre, supposons que le client ait acheté 1 appareil A et 1 article B et ensuite acheté 1 article A et 1 article C. étant dit client a une liste de 4 articles et une liste de 2 transactions. Y a-t-il un lien entre chaque transaction et les articles achetés par le client? – Christos

+0

@Christos no, theres aucune référence entre les articles et les transactions, ils sont simplement liés via la table utilisateur .. – User987

+0

Pouvez-vous poster les schémas? C'est bizarre pour moi que vous vous regroupiez par 'TransactionID'. Par définition, l'identifiant devrait être unique. –

Répondre

1

Pour autant que je reçois votre schéma de la table, vous devriez commencer votre recherche de la table utilisateur pendant que vous filtrez vos données par SearchUserId afin, tout d'abord obtenir des données avec les relations de table de l'utilisateur

Note: Comme je ne connaître vos tables schéma UserId considéré comme User table de clé primaire et Transactions et Items tables de clé étrangère dans cet exemple de code

var result = (from usr in ctx.User 
       where usr.UserId == firstRequest.SearchedUserID 
       select new { 
        UserId = usr.UserId, 
        Transactions = usr.Transactions, 
        Items = usr.Items 
       }) 

Ensuite, essayez de filtrer, groupe, ... sur des données. Mais si vous voulez sélectionner ce que vous avez mentionné dans votre question, vous devriez avoir une relation entre les tables Items et Transactions.