2012-03-02 9 views
6

Biorąc pod uwagę następujący kodJak sformatować ciąg w wyrażeniu 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("###-###-#### ####") + ")"; 

Jest to wezwanie do mojego Entity Framework. Zwracam numer telefonu z bazy danych. Próbuję sformatować go w danym ciągu formatu. Niestety, kiedy biegnę to, że pojawia się następujący błąd:

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

Więc moje pytanie brzmi: jak mogę zwrócić ten obiekt bazy danych jako sformatowany ciąg?

Dzięki!

+0

Czy chcesz, aby wynik był "IQueryable"? Nie możesz po prostu uzyskać 'IEnumerable ' przy użyciu 'var clients = ...'? –

+0

Nie. Czy baza danych zajmuje się danymi; mieć kod prezentacji z prezentacją. – AakashM

+0

W końcu jest zwracany jako ciąg [], więc cokolwiek to zrobi. Co obecnie robię jest ciąg [] cst = customers.ToArray(); Więc nie jestem całkiem pewien, czy to musi być IQueryable. – Kevin

Odpowiedz

21

chciałbym wykonać zapytań w bazie danych, ale formatowania lokalnie:

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

Nie jestem pewien, czy jest to właściwa droga, ale chciałem użyć czegoś ja” m wygodne z. Jeśli używasz struktury encji i ładujesz ją, możesz umieścić String.Format w kwerendzie 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()) 

Aby załadować, należy odwołać się do System.Data.Entity, ale łatwo jest sformatować wyniki w dowolny sposób.

Mam nadzieję, że to pomoże komuś. Wiem, że to jest w vb.net, ale nie byłoby trudno przekonwertować na C#.

Powiązane problemy