如何搜索导航属性的属性

时间:2018-06-13 12:25:06

标签: c# entity-framework where-clause navigation-properties

我正在使用ASP.NET创建一个数据库,它包含两个类CountriesSpecies。 Species模型包含ICollection类型Country,我试图在Species Index视图中允许搜索字符串不仅检查Species的名称,而且如果用户键入名称改为国家/地区,以返回其国家/地区集合包含名称与搜索字符串匹配的国家/地区的物种:

public ActionResult Index(string searchString, string Poison, string Venom)
{
    var species = db.Species.Include(s => s.Countries);
    if (!String.IsNullOrEmpty(searchString))        
    {   
        species = species.Where(s => s.Name.Contains(searchString) || **s has a country who's Name contains searchString**);    
    }
}

这是我关于stackoverflow的第一个问题,我不确定需要多少次失败尝试的例子,但我收到的错误消息很大程度上是基于无法将类型Country转换为String:

  

类型'集合的值[NSDBz.DAL.Country(Nullable = True,DefaultValue =)]'无法转换为字符串。

我可以看到有类似的问题被问到但是他们的要求有点复杂,所以我无法按照目前的技术水平将解决方案应用于我的问题。

2 个答案:

答案 0 :(得分:3)

根据您的错误,您似乎正在尝试将strftime集合与字符串进行比较,而不是检查集合中的任何国家是否具有匹配的名称。我建议尝试类似以下内容:

Countries

答案 1 :(得分:0)

根据您的要求,您需要具有searchString县的物种,因此Linq将返回一个包含您的搜索字符串国家/地区的物种列表

public ActionResult Index(string searchString, string Poison, string Venom)
{
    var species = db.Species.Include(s => s.Countries);
    if (!String.IsNullOrEmpty(searchString))        
    {   
        species = species.Where(s => s.Countries.Any(c => c.Name.Contains(searchString)));    
    }
}