2012-03-02 14 views
6

Dato il seguente codiceCome formattare una stringa in un'espressione linq?

IQueryable<string> customers = 
    from Customers in db.Customers 
    where Customers.CstCompanyName.Contains(prefixText) && Customers.CstInactive == false 
    select Customers.CstCompanyName + " (Phone: " + Convert.ToInt64(Customers.CstPhone).ToString("###-###-#### ####") + ")"; 

Questa è una chiamata al mio quadro entità. Sto restituendo un numero di telefono dal database. Sto provando a formattarlo nella stringa di formato indicata. Purtroppo, quando ho eseguito questo, ricevo il seguente errore:

LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression. 

Quindi la mia domanda è: come faccio a restituire l'oggetto di database come una stringa formattata?

Grazie!

+0

Avete bisogno che il risultato sia un 'IQueryable'? Non puoi semplicemente ottenere un 'IEnumerable ' usando 'var customers = ...'? –

+0

no. Avere il database a gestire i dati; avere un accordo sulla presentazione del codice con la presentazione. – AakashM

+0

Alla fine, viene restituito come una stringa [], quindi qualsiasi cosa lo compia. Quello che sto facendo attualmente è string [] cst = customers.ToArray(); Quindi non sono abbastanza sicuro se deve essere IQueryable. – Kevin

risposta

21

vorrei eseguire l'interrogazione nel database, ma il formattazione a livello locale:

var customers = db.Customers 
        .Where(c => c.CstCompanyName.Contains(prefixText)) 
        .Select(c => new { c.CstCompanyName, c.CstPhone }) 
        .AsEnumerable() // Switch to in-process 
        .Select(c => c.CstCompanyName + 
           " (Phone: " +    
           Convert.ToInt64(Customers.CstPhone) 
             .ToString("###-###-#### ####") + ")"); 
0

io non sono sicuro se questo è il modo corretto, ma ho voluto usare qualcosa che ho' m confortevole con. Se si utilizza il framework entità e lo si carica, è possibile inserire String.Format nella query LINQ.

Dim ds as Entity = New Entity() 
    ds.FinancialInstitutionTransactions.OrderByDescending(Function(c) c.TransID).Load() 

    Dim openLoad = From tr In ds.FinancialInstitutionTransactions.Local 
        Select TransDate = String.Format("{0:d}", tr.Date), 
        tr.Number, 
        tr.ToFrom, 
        Debit = If(tr.Debit = 0, " ".ToString(), String.Format("{0:N}", tr.Debit).ToString()), 
        Credit = If(tr.Credit = 0, " ".ToString(), String.Format("{0:N}", tr.Credit).ToString()) 

è necessario fare riferimento System.Data.Entity a caricare, ma allora è facile per formattare i risultati nel modo desiderato.

Spero che questo aiuti qualcuno. So che questo è in vb.net ma non sarebbe difficile convertirlo in C#.

Problemi correlati