5

Tôi bị kẹt ở đâu đó trên ứng dụng ASP.NET MVC 3 của tôi. đây là lỗi tôi nhận được:Chỉ các trình khởi tạo, thành viên thực thể và thuộc tính điều hướng thực thể mới được hỗ trợ. (ASP.NET MVC và Entity Framework)

Thành viên loại được chỉ định 'AccommPropertyTags' không được hỗ trợ trong LINQ to Entities. Chỉ người khởi tạo, thành viên tổ chức và pháp nhân thuộc tính điều hướng mới được hỗ trợ.

Tôi đã tìm thấy như thế nào chúng ta có thể giải quyết việc này vào bài viết sau đây:

Only initializers, entity members, and entity navigation properties are supported

Nhưng tôi là một chút kỳ quặc.

Đây là một trong những lớp một phần của thực thể của tôi:

[MetadataType(typeof(AccommPropertyWebDetail.MetaData))] 
public partial class AccommPropertyWebDetail { 

    public virtual ICollection<string> AccommPropertyTags { 

     get { 

      return Helpers.AccommPropertyTag.CreateStringListFromString(this.PropertyTags); 
     } 
    } 

    private class MetaData { 

     [Required, StringLength(50)] 
     public string Category { get; set; } 

    } 
} 

Như bạn thấy ở trên, AccommPropertyTags tài sản là typeof ICollection<string>. Những gì tôi đang cố gắng bên trong bộ điều khiển của tôi là như sau:

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    model = model.Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(model); 
} 

Bởi vì thực tế là tôi đang sử dụng Any đó, Entity đang cố gắng để chuyển đổi sở hữu AccommPropertyTags tôi để SQL và không thể vì nó không phải là một phần của schema bảng.

Tôi có thực sự bị kẹt ở đây hoặc có cách nào hay để đánh bại lỗi gây phiền nhiễu này không?

Trả lời

10

Sự cố của bạn tương tự như câu hỏi bạn đã liên kết. Gọi model.ToList() trước khi sử dụng Where. Điều này sẽ buộc EF phải thực hiện các thực thể và sau đó áp dụng phần còn lại của bộ lọc trong bộ nhớ.

public ViewResult Tag(string tag) { 

    var _rawTag = HttpUtility.UrlDecode(tag); 

    ViewBag.Tag = _rawTag; 

    var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus(); 

    var result = model.ToList().Where(
      x => x.AccommPropertyTags.Any(
        y => y == _rawTag 
       ) 
     ); 

    return View(result); 
} 
Các vấn đề liên quan