2012-03-02 32 views
6

Được cung cấp mã sauLàm thế nào để định dạng một chuỗi trong một biểu thức 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("###-###-#### ####") + ")"; 

Đây là cuộc gọi đến khung pháp nhân của tôi. Tôi đang trả lại một số điện thoại từ cơ sở dữ liệu. Tôi đang cố định dạng nó trong chuỗi định dạng đã cho. Thật không may, khi tôi chạy điều này, tôi nhận được lỗi sau:

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

Vì vậy, câu hỏi của tôi là làm cách nào để trả lại đối tượng cơ sở dữ liệu này dưới dạng chuỗi được định dạng?

Cảm ơn!

+0

Bạn có cần kết quả là một 'IQueryable' không? Bạn không thể chỉ nhận được một 'IEnumerable ' bằng cách sử dụng 'var clients = ...'? –

+0

Không. Có thỏa thuận cơ sở dữ liệu với dữ liệu; có mã trình bày giao dịch với bản trình bày. – AakashM

+0

Cuối cùng, nó đang được trả về như một chuỗi [], vì vậy bất cứ điều gì sẽ thực hiện điều này. Những gì tôi hiện đang làm là string [] cst = customers.ToArray(); Vì vậy, tôi không hoàn toàn chắc chắn nếu nó cần phải được IQueryable. – Kevin

Trả lời

21

tôi sẽ thực hiện các truy vấn trong cơ sở dữ liệu, nhưng định dạng địa phương:

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

Tôi không chắc chắn nếu điều này là cách đúng đắn, nhưng tôi đã muốn sử dụng một cái gì đó tôi m thoải mái với. Nếu bạn đang sử dụng khung thực thể và tải nó thì bạn có thể đặt String.Format trong truy vấn 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()) 

Bạn cần tham khảo System.Data.Entity để tải, nhưng sau đó dễ định dạng kết quả theo bất kỳ cách nào bạn muốn.

Tôi hy vọng điều này sẽ giúp ai đó. Tôi biết điều này là trong vb.net nhưng nó sẽ không khó để chuyển đổi sang C#.

Các vấn đề liên quan