2012-03-02 24 views
6

Aşağıdaki koduBir dize bir linq ifadesinde nasıl biçimlendirilir?

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("###-###-#### ####") + ")"; 

Bu benim varlık çerçevesine bir çağrıdır Verilen. Veritabanından bir telefon numarası döndürüyorum. Verilen biçim dizesinde biçimlendirmeye çalışıyorum.

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

Benim soru nasıl bir biçimlendirilmiş dize olarak bu veritabanı nesnesini döndürür do edilir: Bu çalıştırdığınızda yazık ki, aşağıdaki hatayı alıyorsunuz?

Teşekkürler!

+0

Eğer sonuç bir 'IQueryable' olması gerekir mi? 'Var customers = ...' kullanarak IEnumerable 'a erişemiyor musunuz? –

+0

Yapma. Veritabanının veri ile ilgilenmesi; Sunu ile sunum kodu anlaşma var. – AakashM

+0

Sonunda, bir dizi [] olarak döndürülüyor, bu yüzden bunu başaracak her şey. Şu anda yapmakta olduğum şey string [] cst = customers.ToArray(); Yani IQueryable olması gerekip gerekmediğinden emin değilim. – Kevin

cevap

21

ben veritabanında sorgulama gerçekleştirmek, ama lokal biçimlendirme:

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

emin değilim bu uygun yolu ise, ancak ben bir şey kullanmak istedim ile rahat. Varlık çerçevesini kullanıyorsanız ve yüklediyseniz, String.Format öğesini LINQ sorgusuna yerleştirebilirsiniz.

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()) 

Sen yüklemek için System.Data.Entity başvurmak gerekir, ama sonra sonuçlar istediğiniz gibi biçimlendirmek için kolaydır.

Bu kimse yardımcı olacağını umuyoruz. Bunun bc.net'de olduğunu biliyorum ama C# 'ya dönüştürmek zor olmaz.

İlgili konular