2017-06-03 4 views
0

j'ai une question qui se réfère à savoir s'il est possible d'accéder à une autre propriété dans LINQ, afin de définir une autre valeur de la propriété à LINQ:C# LINQ accéder à une autre propriété dans une instruction LINQ SELECT (méthode)

var v = ctx.myTableItems 
      .Where(x => x.id== anotherid) 
      .Select(e => new MyViewModel 
      { 
      Title = e.Title, 
      CurrentPrice = e.CurrenctPrice.Value, 

      ItemID = e.ItemID.ToString(), 
      Transactions= e.Transactions, 
      Sales = 
      }) 
      .Where(x=>x.Sales>0); 

Alors vérifier ceci dehors, quand je réglais ma propriété de Transactions j'ai placé la collection de transactions dans ma ligne précédente, et maintenant je voudrais placer ma propriété de ventes avec la propriété de Transactions qui a été assignée dans une ligne précédente:

Transactions= e.Transactions, 
    Sales = e.Transactions.Sum(x=>x.Quantity) // Normaly I'd do it like this 

Mais je voulais essayer quelque chose comme ceci:

Sales = Transactions.Sum(x=>x.Quantity) // is this doable ? 

Donc ma question ici est, est-il possible de définir une autre propriété dans l'instruction select avec une valeur de la propriété précédente? Dans mon cas c'est la collection Transactions?

Est-ce faisable, si oui, comment?

P.S. J'essaye de comprendre si c'est faisable parce que si je pourrais employer la valeur de cette propriété précédemment définie, alors j'éviterais d'effectuer 2 requêtes inutiles sur ma table de transactions dans la DB?

Répondre

1

Vous ne pouvez pas utiliser la valeur précédente car vous ne souhaitez pas appeler e.Transactions.Sum() pour chaque élément.

Il suffit d'ajouter une méthode pour MyViewModel

public double GetSales() 
{ 
return Transactions.Sum(x=>x.Quantity); 
} 

//at the end of your code use: 
.Where(x=>x.GetSales()>0); 
+0

Dois-je faire à l'instruction select ainsi? – User987

+0

Non, supprimez simplement le membre des ventes et remplacez-le par la méthode. –

+0

Ah ok mais comment vais-je remplir la collection de transactions pour chaque élément que j'ai dans la base de données? C'est la partie qui me déroute ... Parce que je n'ai pas de collection Transactions dans ma classe ViewModel? P.S. Chaque article a un ensemble différent de transactions ... Donc je suppose que la façon dont je l'ai fait était nécessaire? – User987