2010-01-13 23 views
68

Tôi đang sử dụng Khuôn khổ thực thể trong mã dựa trên C# của tôi. Tôi đang chạy vào một sự kỳ lạ bất ngờ và đang tìm kiếm gợi ý.Khuôn khổ thực thể - Không thể chuyển đổi biểu thức lambda thành loại 'chuỗi' bởi vì nó không phải là loại đại biểu

Trường hợp 1, 2, 3, 4 ... Dự án:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

Samples (tất cả các công việc):
RivWorks.Alpha.dll:

public static bool EndNegotitation(long ProductID) 
{ 
    var product = (from a in _dbFeed.AutoWithImage 
        where a.AutoID == ProductID select a).FirstOrDefault(); 
... 
} 

RivWorks.Service.dll

public static RivWorks.Model.NegotiationAutos.AutoWithImage 
    GetProductById(long productId) 
{ 
    var myProduct = from a in _dbFeed.AutoWithImage 
        where a.AutoID == productId select a; 

    return myProduct.FirstOrDefault(); 
} 
public static List<RivWorks.Model.NegotiationAutos.AutoWithImage> 
    GetProductByCompany(Guid companyId) 
{ 
    var myProduct = from a in _dbFeed.AutoWithImage 
        where a.CompanyID == companyId select a; 

    return myProduct.ToList(); 
} 

vv

Case "weirdness":
(dự án WCF) RivWorks.Web.Service.dll
Chứa các tài liệu tham khảo tương tự như các dự án khác.

public NegotiateSetup GetSetup(string method, string jsonInput) 
{ 
    ... 
    long.TryParse(ProductID, out result); 
    var product = (from a in _dbFeed.AutoWithImage 
        where a.AutoID == result select a).FirstOrDefault(); 
    ... 
} 

Tôi nhận này lỗi thời gian biên dịch (từ "ở đâu" được đánh dấu trong trình soạn thảo của tôi):
Không thể chuyển đổi biểu thức lambda để gõ 'chuỗi' vì nó không phải là một loại đại biểu

Bất kỳ ý tưởng nào sẽ gây ra điều này?

+0

Điều đó nghe có vẻ lạ. Nếu bạn xóa cuộc gọi đến 'FirstOrDefault', điều gì sẽ xảy ra?Rõ ràng là nó sẽ thất bại khi bạn cố gắng sử dụng 'sản phẩm' sau đó, nhưng câu lệnh đó có biên dịch không? –

+0

Ngoài ra, nếu bạn thay đổi nó thành 'var product = _dbFeed.AutoWithImage.Where (a => a.AutoID == result);' điều gì xảy ra sau đó? Hãy lấy các biểu thức truy vấn ra khỏi hỗn hợp ... –

+1

Tất cả các ví dụ đó đều thất bại. Tuy nhiên, tôi đã đi qua các báo cáo sử dụng trong tất cả các phần mã của tôi và phát hiện ra tôi đã mất tích: Sử dụng System.Linq; Điều đó đã sửa lỗi.

Trả lời

106

Đối với những người quan tâm đến kết quả:
Tôi đã thiếu một câu lệnh Sử dụng đơn giản ở phần đầu mã của tôi.

using System.Linq; 

Điều này cố định nó phải lên.

+13

Tôi ngạc nhiên rằng cả VS và ReSharper đều không đủ thông minh để phát hiện tình trạng này. Rất may SO thông minh hơn cả hai. – bwerks

+0

Cảm ơn bạn, thậm chí không nghĩ về điều đó cho đến khi tôi đọc nó. –

+2

Tôi nhận được cùng một thông báo lỗi, và tôi có (và "luôn luôn có") bằng cách sử dụng System.LINQ. Tất nhiên, một trong những thành viên mô hình đã thay đổi kiểu dữ liệu từ chuỗi [] thành chuỗi ... –

7

Trong trường hợp của tôi, tôi đã có

Using System.Linq; 

nhưng tôi đã thiếu & & sau một nơi mục khoản.

Bad Mã số:

item.Group.ID == grp.ID 
p.Product_Status_Flag == 1 && 
item.Valid 

Mã đúng (không có lỗi):

item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away. 
p.Product_Status_Flag == 1 && 
item.Valid 

Tôi hy vọng điều này giúp tiết kiệm một ai đó một thời gian.

7

Tôi đã vật lộn với điều này trong mẫu Lưới Telerik trong chế độ xem Dao cạo trong khoảng một giờ. Trong trường hợp của tôi, điều này:

columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>); 

được cho là điều này:

columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>); 

Vụ việc trên "Id" là sai! Tôi hi vọng điêu nay se giup được ai đo.Bạn có thể nhận được lỗi này chỉ vì bạn đặt một tài sản không tồn tại!

0

Tôi đã có một cột liên kết vấn đề tương tự với lưới Telerik MVC. Tôi có thuộc tính Id trên lớp ViewModel của mình. (Lấy cảm hứng từ câu trả lời của Chris ở trên) Tôi đổi tên nó thành XxxId và vấn đề đã biến mất. Tôi dường như nhớ lại một cái gì đó về MVC làm một cái gì đó đặc biệt cho các thuộc tính Id.

0

Tôi đã có một vấn đề tìm kiếm tương tự nhưng với Rx và trong trường hợp của tôi thêm

using System; 

giúp. FWIW

Việc sử dụng các phương pháp mở rộng bị thiếu đôi khi quá khó chịu.

1

tôi đã có cùng một vấn đề với MVC 3 dao cạo có thể ai đó có cùng vì vậy tôi muốn hiển thị như thế nào để sửa chữa nó trong stuation tôi

List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32(list[0].Id))).ToList(); 

tôi đã cố gắng để sử dụng chứa nhưng vì thế OgrenciId là int i nhận được lỗi được đề cập ở đây vì vậy bằng cách sử dụng bằng vấn đề được giải quyết

2

Tôi tình cờ gặp điều này và tìm thấy một sửa chữa khác. Tôi đã sử dụng var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong"); và nhận được lỗi được đề cập. Sai lầm là tôi đã sử dụng phương thức FullNameReverse() làm thuộc tính FullNameReverse. Bo lo()!!!

85

Trong trường hợp của tôi nó đã mất tích

using System.Data.Entity;

+0

Tôi đã "sử dụng System.Data.EntityClient;" Và, mặc dù nó ở đó, nó chuyển sang màu xám/không cần thiết. System.Data.Entity một mình (không có "Client") không được phép. –

+1

Bạn, Sir Miguel, là một thiên tài. Cảm ơn! – oHoodie

0

Trong trường hợp của tôi, tôi đã có lỗi này khi cố gắng sử dụng Include in clientContext.Load trong 2013 ứng dụng Sharepoint.

tôi đã bao gồm Sharepoint thư viện khách hàng như sau:

using SP = Microsoft.SharePoint.Client; 

Để khắc phục, ngoài ra tôi cũng nói thêm nó mà không có không gian tên:

using Microsoft.SharePoint.Client; 
using SP = Microsoft.SharePoint.Client; 
0

Vấn đề của tôi liên quan đến định dạng:

.Columns(columns => { 
    columns.Bound(p => p.Id).Filterable(false); 
    columns.Bound(p => p.Name).Width(250); 
    ... 

Mọi p.Whatever có lỗi này trên đó.

Đây là dự án sử dụng MVC và tôi phát hiện thấy sự cố của mình là "static static int" hoặc "public static string" trên các biến này (Id, Name, v.v.) trong mô hình của mình. Khi tôi xóa "tĩnh" trên tất cả các biến mô hình của mình, tôi không còn gặp lỗi. Đã khiến tôi phát điên trong một ngày ...

0

Tôi gặp sự cố này trong một phiên bản hơi khác.
Nếu bạn gọi phương thức (tĩnh) từ bên trong lambda của bạn, hãy kiểm tra kiểu trả về của nó. Nếu kiểu trả về phải là một IEnumerable (thường là đúng khi sử dụng lambdas) nhưng bạn trả về đối tượng, rõ ràng là bạn có một vấn đề.

7
using System.Linq; 
using System.Data.Entity; 
0

Chỉ cần thử bằng System.Linq; Tôi nghĩ rằng nó sẽ giúp bạn phân loại các vấn đề này.

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