J'ai été aux prises avec le problème suivant sur Entity Framework code-first.EF-code d'abord - IQueryable ayant multiplication sur une propriété décimale spécifique
J'ai une classe d'entité avec un nombre décimal, et j'ai un paramètre décimal multiplicateur.
Je souhaite créer une requête (sans l'appeler), qui renvoie les entités, mais la propriété Bar
doit être multipliée avec mon paramètre.
De côté codage:
public class Foo
{
public Guid Id { get; set; }
public Decimal Bar { get; set; }
}
// this simple stuff returns the entities after some filterings.
Context.Set<Foo>().Where(x => querying on many props).ToList();
Cette méthode est similaire ce que je veux atteindre:
public IQueryable<Foo> GetFooQuery(.. Many properties used to the query .. , Decimal Multiplier)
{
var IQueryablePart = Context.Set<Foo>().Where(querying with the parameters);
/* ... and what to do here? ... */
/* IQueryablePart = IQueryablePart.Select(x => new {
Bar = Bar * Multiplier <-- this is okay
}); */
// but how to retrieve the other columns without listing them one by one, and how to return the data as IQueryable<Foo> ?
return IQueryablePart;
}
Je voudrais utiliser cette méthode de la manière suivante:
IQueryable<Foo> FullQuery = null;
for(some loop, may be 10 or 1000 iterations, it depends) {
var Part = GetFooQuery(/* .. query params ..*/, 2);
if(MyFullQuery == null)
FullQuery = Part;
else
FullQuery.Union(Part);
}
// and in the end, do the db call once:
var Result = FullQuery.ToList();
En SQL, je voudrais le gérer comme ceci:
SELECT
Id,
Bar * @MyValue as Bar,
# and all other columns
FROM
Foo
WHERE
(param queries 1) OR
(param queries 2) OR
---
(param queries N)
Ma question est: quelle est la façon de le faire via IQueryable
et EF? Le plus important, je dois appeler le DB une seule fois. Je pense qu'il peut s'agir d'un peu de construction de requêtes, mais je ne suis pas encore familier avec cela, toute aide sera très appréciée.
Si les deux 'bar' et' MyValue 'font partie de la même table (ie entité), alors la solution logique serait de le récupérer avec une propriété auto dans votre code à la place. – silkfire
Malheureusement, ils ne le sont pas. Le multiplicateur est calculé par code. –
D'où obtenez-vous @MyValue? – silkfire