2013-08-03 17 views
5

Sono nuovo di MVC.rasoio in mvc foreach in vista con dati ordinati

Voglio implementare l'ordinamento dei dati sulla mia pagina html. Ho un modello che ha generato con questo codice:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        select g; 
    return results; 
} 

e una vista:

@model IEnumerable<PercConfigEntry> 
@foreach (var config in Model) 
{ 
    ... 
} 

Questo funziona. Ma quando aggiungo "orderby" per interrogare in questo modo:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        orderby g.ConfigName 
        select g; 
    return results; 
} 

getta DataServiceQueryException su foreach.

Cosa c'è che non va?

Grazie in anticipo.

+0

Dubito che questo abbia qualcosa a che fare con MVC o rasoio. La mia ipotesi è che si tratta di un problema con il provider di query del servizio dati. Se chiamate 'ToList()' all'interno di 'GetPercConfigEntries()' l'eccezione dovrebbe esserci. –

+0

Prova a chiamare 'ToList()' e poi usa ordine come 'results.OrderBy (x => x.ConfigName)' – Nilesh

+0

'var results = (da g in this.context.PercConfigEntry dove g.Key ==" ConfigEntries " seleziona g) .OrderBy (o => o.ConfigName);' – christiandev

risposta

2

Il problema ha qualcosa a che fare con il provider di query; forse semplicemente non supporta l'ordinamento. Senza ulteriori informazioni, vi consiglio questo:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = 
     (from g in this.context.PercConfigEntry 
     where g.Key == "ConfigEntries" 
     select g) 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

O nella sintassi fluente:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = this.context.PercConfigEntry 
     .Where(g => g.Key == "ConfigEntries") 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

Questo costringe la query da eseguire sul fornitore senza alcun ordinamento, poi ri-ordini sul client — in altre parole, la chiamata a AsEnumerable disconnette efficacemente il set di risultati dal provider di query in modo che il OrderBy (o qualsiasi metodo successivo) siano valutati sul client. Probabilmente non è così efficiente come consentire al provider di ordinarlo, ma se il provider non supporta l'ordinamento, questo è l'unico modo per farlo.

Problemi correlati