5

Sono bloccato da qualche parte sulla mia app ASP.NET MVC 3. qui è l'errore che sto ottenendo:Sono supportati solo gli inizializzatori, i membri dell'entità e le proprietà di navigazione dell'entità. (ASP.NET MVC ed Entity Framework)

Il membro tipo specificato 'AccommPropertyTags' non è supportato in LINQ to Entities. Sono supportati solo gli elementi di inizializzazione, i membri dell'entità e le proprietà di navigazione dell'entità .

ho trovato come possiamo risolvere questo il seguente articolo:

Only initializers, entity members, and entity navigation properties are supported

Ma il mio è un po po 'strano.

Ecco una delle classe parziale della mia entità:

[MetadataType(typeof(AccommPropertyWebDetail.MetaData))] 
public partial class AccommPropertyWebDetail { 

    public virtual ICollection<string> AccommPropertyTags { 

     get { 

      return Helpers.AccommPropertyTag.CreateStringListFromString(this.PropertyTags); 
     } 
    } 

    private class MetaData { 

     [Required, StringLength(50)] 
     public string Category { get; set; } 

    } 
} 

Come potete vedere sopra, AccommPropertyTags proprietà è typeof ICollection<string>. Quello che sto cercando dentro il mio controller è la seguente:

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    model = model.Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(model); 
} 

A causa del fatto che sto usando Any lì, Entity sta cercando di convertire la mia proprietà AccommPropertyTags a SQL e non posso perché non è parte dello schema della tabella.

Sono davvero bloccato qui o c'è un modo interessante per battere questo fastidioso errore?

risposta

10

Il tuo problema è simile alla domanda che hai collegato. Chiama il numero model.ToList() prima di utilizzare Where. Ciò obbligherà EF a materializzare le entità e quindi applicherà il resto del filtraggio in memoria.

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    var result = model.ToList().Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(result); 
} 
Problemi correlati