2011-07-14 59 views
11

Trong điều khiển của tôi tôi đang cố gắng sử dụng bao gồm với EF4 để chọn các đơn vị liên quan, nhưng các biểu thức lambda là ném các lỗi sau,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

i có đơn vị liên quan theo quy định tại các lớp Entity như

public class CustomerSite 
{ 
    public int CustomerSiteId { get; set; } 
    public int CustomerId { get; set; } 
    public virtual Customer Customer { get; set; } 
} 

Sau đó, trong điều khiển của tôi tôi có

var sites = context.CustomerSites.Include(c => c.Customer); 

public ViewResult List() 
{ 
    var sites = context.CustomerSites.Include(c => c.Customer); 
    return View(sites.ToList()); 
} 

bất cứ ai có thể vui lòng chỉ cho tôi đi đúng hướng vào những gì Tôi đang làm sai ở đây?

Trả lời

9

Phương pháp Include sẽ là một chuỗi, không phải là một lambda:

public ViewResult List() 
{ 
    var sites = context.CustomerSites.Include("Customer"); 
    return View(sites.ToList()); 
} 

Tất nhiên bạn có thể viết một custom extension method mà sẽ làm việc với các biểu thức lambda và làm cho độc lập mã của bạn của một số dây ma thuật và cấu trúc thân thiện hơn.

Nhưng bất cứ điều gì bạn làm XIN VUI LÒNG XIN VUI LÒNG KHÔNG chuyển các đối tượng được tạo tự động EF cho quan điểm của bạn. SỬ DỤNG XEM MÔ HÌNH.

+1

cảm ơn, nhưng nói dễ hơn làm, tôi không thể tìm thấy một ví dụ rắn về cách sử dụng xem các mô hình để trả lại dữ liệu liên quan – Liam

+0

@ Dimitrov Bạn có thể vui lòng xem xét một câu hỏi tương tự mà tôi đã đăng. http://stackoverflow.com/q/16060884/1356321 – Pomster

+0

Bạn có thể vui lòng tham khảo bản cập nhật bên dưới: http: // stackoverflow không.com/a/9428710/1268910 –

1

Include lấy một chuỗi chứ không phải biểu thức lambda.
Thay đổi nó thành CustomerSites.Include("Customer")

67

Vâng, bài đăng khá cũ, nhưng chỉ trả lời ở đây để cập nhật. Vâng, phương pháp Include() với Khuôn khổ thực thể 4.1 có các phương thức mở rộng và nó cũng chấp nhận một biểu thức lambda. Vì vậy,

context.CustomerSites.Include(c => c.Customer); 

là hoàn toàn hợp lệ, tất cả các bạn cần làm là sử dụng này:

using System.Data.Entity; 
8

Bao gồm là một phương pháp mở rộng trong không gian tên System.Data.Entity, bạn cần phải thêm:

using System.Data.Entity; 

Sau đó, bạn có thể sử dụng biểu thức lambda, thay vì chuỗi.

0

Nếu bạn đang nhận được lỗi này trong Razor:

Ex:

@Html.RadioButtonFor(model => model.Security, "Fixed", new { @id = "securityFixed"})        

C# không biết làm thế nào để chuyển đổi chuỗi để bool hợp lệ hoặc loại biết đến.

Vì vậy, thay đổi chuỗi của bạn như sau:

@Html.RadioButtonFor(model => model.Security, "True", new { @id = "securityFixed"}) 

hoặc

@Html.RadioButtonFor(model => model.Security, "False", new { @id = "securityFixed"})  
Các vấn đề liên quan