5

我被困在我的ASP.NET MVC 3应用程序的某个地方。这里是我得到的错误:仅支持初始化程序,实体成员和实体导航属性。 (ASP.NET MVC和实体框架)

指定的类型成员“AccommPropertyTags”不 支持LINQ到实体。仅支持初始化程序,实体成员和实体 导航属性。

我发现我们怎么可以在下面的文章解决这个问题:

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

但是我的是一个有点古怪。

下面是部分类我的实体之一:

[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; } 

    } 
} 

正如你可以在上面看到,AccommPropertyTags属性的typeof ICollection<string>。什么我正控制器内部如下:

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); 
} 

因为事实上,我现在用Any存在,实体试图我AccommPropertyTags财产转换为SQL并且不能因为它不是表模式的一部分。

我真的陷入这里,还是有一种很酷的方式来击败这个恼人的错误?

回答

10

您的问题与您链接的问题类似。在使用Where之前拨打model.ToList()。这将强制EF实现实体,然后在内存中应用剩余的过滤。

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); 
}