2014-04-22 14 views
9

Tôi đang sử dụng Entity Framework và tôi có một dòng mã đang dùng var và dịch nó trở lại một iint cho cơ sở dữ liệu.LINQ to Entities không nhận ra phương thức 'Int32 Parse (System.String)' và phương thức này không thể được dịch sang biểu thức cửa hàng

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID)); 

Bất cứ khi nào tôi cố gắng chạy, tôi nhận được lỗi rhis. "LINQ to Entities không nhận ra phương thức 'Phương thức phân tích cú pháp Int32 (System.String)' và phương pháp này không thể được dịch sang biểu thức cửa hàng."

Tôi đã cố gắng này cũng

var record = context.enrollments.FirstOrDefault 
    (row => row.userId == Convert.ToInt32(UserID) 
    && row.classId == Convert.ToInt32(ClassID)); 

và tất cả tôi nhận được là thông báo lỗi này, "LINQ to Entities không nhận ra phương pháp 'Int32 ToInt32 (System.String)' phương pháp, và phương pháp này có thể không được dịch sang một biểu hiện cửa hàng

và cuối cùng tôi đã cố gắng này là tốt, mà tôi biết là không bình thường, nhưng nó đã làm việc trong quá khứ cho các tình huống tương tự.

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) 
    && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID)); 

Tôi bị lỗi này. Như bạn có thể thấy tôi đã thử bảy thứ khác nhau và không có gì làm việc, vì vậy bất kỳ sự trợ giúp nào cũng sẽ tuyệt vời.

+0

Nếu tôi nhớ chính xác, bạn _should_ có thể thay thế 'int.Parse' bằng' Convert.ToInt32' để làm cho nó hoạt động. –

+0

Tôi đã đề cập đến điều này trong các bình luận, nhưng tôi đã thử và tôi nhận được thông báo lỗi này, "{LINQ to Entities không nhận ra phương pháp 'Int32 ToInt32 (System.String)' phương pháp, và phương pháp này không thể dịch vào một biểu thức cửa hàng. "}" – SinceForever

+0

Bạn đã thử sử dụng không gian tên đầy đủ như 'System.Convert.ToInt32' chưa? Tôi không biết đây có phải là thứ gì đó mà LINQ không hỗ trợ hay không. Chỉ cần đoán ở đây. – Bensonius

Trả lời

17

trong Linq to Entity, bạn nên sử dụng các phương pháp trong query của bạn được hỗ trợ bởi provider của bạn để chuyển đổi chúng sang expression tree để chạy về phía Data Base của bạn.

tất cả các nhà cung cấp phải hỗ trợ một số phương pháp theo mặc định gọi Canonical Functions (Read More Here), và cũng có thể bạn có thể xác định user defined function của bạn và stored procedure như edm functions để sử dụng trong linq query (Read More Here) và (Here).

ngoài ra bạn có thể sử dụng các phương pháp được nhà cung cấp hỗ trợ và có thể được chuyển đổi thành expression tree có trong EntityFunctionsSqlFunctions.

và cuối cùng về câu hỏi của bạn, bạn có thể chuyển đổi UserIDClassID trước truy vấn của bạn, như thế này:

var UID = int.Parse(UserID); 
var CID = int.Parse(ClassID); 
var record = context.enrollments.SingleOrDefault 
    (row => row.userId == UID && row.classId == CID); 
+0

Cảm ơn bạn Amir. Tôi đã bị mắc kẹt trên cái này một lúc, và không thể nào trả lời câu trả lời ở bất cứ nơi nào khác. – SinceForever

+0

bạn được chào đón –

0

này làm việc cho tôi:

var iId = int.Parse(TextBox1.Text); 
var item = db.Items.Where(p => p.ItemID == iId).FirstOrDefault(); 

Để thực hiện công việc mà bạn nên chuyển đổi của bạn giá trị textbox bên ngoài biểu thức lambda.

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