Voici un projet simple basé sur une classe Poco nommée Task
:Include dérivé propriété dans une requête LINQ to entité
class Program
{
static void Main(string[] args)
{
using (MyDbContext ctx = new MyDbContext())
{
// first query
DateTime compareDate = DateTime.Now + TimeSpan.FromDays(3);
var res = ctx.Tasks.Where(t => t.LastUpdate < compareDate).ToList();
// second query
res = ctx.Tasks.Where(t => t.ShouldUpdate).ToList();
}
}
}
public class MyDbContext : DbContext
{
public DbSet<Task> Tasks { get; set; }
}
public class Task
{
public int ID { get; set; }
public DateTime LastUpdate { get; set; }
public bool ShouldUpdate
{
get
{
return LastUpdate < DateTime.Now + TimeSpan.FromDays(3);
}
}
}
Ce que je veux faire est d'interroger le contexte dbset
y compris dans la clause where de la ShouldUpdate
propriété dérivée.
La "première requête fonctionne bien" (je ne peux pas l'écrire sur une seule ligne mais cela n'a pas d'importance).
Comme vous le savez, nous obtenons un NotSupportedException
sur la "deuxième requête", avec le message suivant: Le membre de type spécifié 'ShouldUpdate' n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d'entité et les propriétés de navigation d'entité sont pris en charge. C'est exact et je peux comprendre pourquoi cela se produit, mais j'ai besoin d'encapsuler les informations dérivées dans l'objet Task
afin que je puisse afficher la propriété dans une grille ou l'utiliser dans tous les autres endroits, sans dupliquer la logique derrière elle.
Existe-t-il une technique intelligente pour ce faire? NB: Comment s'appelle la propriété ShouldUplate
? dérivé? calculé? calculé?
J'ai un problème similaire, mais je reçois une erreur "non supporté" même lorsque j'essaie d'utiliser une expression statique comme ci-dessus. Une idée de pourquoi cela pourrait être? – MysteriousWhisper
pouvez-vous donner un exemple? –