L'Entity Framework e le custom class coinvolte nei where...

di Andrea Zani, in .NET,

Riprendo il solito esempio di entity:

entity in visual studio 2008

Ipotizzando di voler recuperare tutti gli Articles con un determinato colore si potrebbe essere spinti a scrivere:

var c=Context.Colors.Where(cc=>cc.Id==1).First();
var coll=from ar in Context.Articles.Include("Colors")
where ar.Colors=c
select ar;

Semplicemente, avendo una entity voglio vedere tutte le entity che hanno come property questo oggetto. Eseguita, però, si ottienere questo errore:

Unable to create a constant value of type 'Closure type'. Only primitive types (for instance Int32, String and Guid) are supported in this context.

Questo perché l'EF non permette il confronto tra oggetti complessi. La soluzione è banale, anzi, in qualche caso più semplice (nel caso di web control che ritornano un valore numerico per identificare una scelta di un utente, per sempio da un dropdownlist):

int c=int.Parse(ddl_colors.SelectedValue); // <- prendo il colore selezionato
var coll=from ar in Context.Articles.Include("Colors")
where ar.Colors.Id=c
select ar;

Oppure:

var c=Context.Colors.Where(cc=>cc.Id==1).First();
var coll=from ar in Context.Articles.Include("Colors")
where ar.Colors.Id=c.Id
select ar;

Soluzione semplice, ma è sempre bene saperla.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese