2012-03-02 17 views
6

Dado el siguiente código¿Cómo formatear una cadena en una expresión 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("###-###-#### ####") + ")"; 

Ésta es una llamada a mi marco de la entidad. Estoy devolviendo un número de teléfono de la base de datos. Estoy tratando de formatearlo en la cadena de formato dada. Por desgracia, cuando corro esto, recibo el siguiente error:

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

Así que mi pregunta es ¿Cómo puedo devolver este objeto base de datos como una cadena con formato?

Gracias!

+0

¿Necesita que el resultado sea un 'IQueryable'? ¿No puedes obtener un 'IEnumerable ' usando 'var customers = ...'? –

+0

No. Haga que la base de datos maneje los datos; tener el código de presentación frente a la presentación. – AakashM

+0

Al final, se devuelve como una cadena [], así que lo que sea que logre esto. Lo que estoy haciendo actualmente es string [] cst = customers.ToArray(); Así que no estoy muy seguro de si necesita ser IQueryable. – Kevin

Respuesta

21

que realizaría la consulta en la base de datos, pero el formateo localmente:

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

no estoy seguro si esta es la forma correcta, pero me han querido utilizar algo que' Estoy cómodo con. Si está utilizando el marco de entidad y lo carga, puede colocar el String.Format en la consulta 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()) 

necesita hacer referencia System.Data.Entity en cargar, pero entonces es fácil dar formato a los resultados de la forma que desee.

Espero que esto ayude a alguien. Sé que esto está en vb.net pero no sería difícil convertirlo en C#.

Cuestiones relacionadas