如何搜索导航 属性 的 属性

How to search the property of a Navigation property

我正在使用 ASP.NET 创建一个数据库,其中包含两个 类、CountriesSpecies。物种模型包含类型 CountryICollection,我试图允许在物种索引视图上搜索字符串,不仅检查物种的名称,而且如果用户键入名称一个国家,而不是return Species who's Country Collections include a Country with a Name matches the search string:

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

这是我关于 Whosebug 的第一个问题,我不确定需要多少失败尝试的示例,但我收到的错误消息主要是基于无法将类型 Country 转换为 String:

Values of type 'collection[NSDBz.DAL.Country(Nullable=True,DefaultValue=)]' can not be converted to string.

我看到有类似的问题被问到,但他们的要求有点复杂,所以以我目前的技能水平,我无法将那里的解决方案应用到我这里的问题。

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

s.Countries.Any(c => c.Name.Contains(searchString))

根据您的要求,您需要具有 searchString 县的物种,因此按照 Linq 将 return 为您提供具有搜索字符串国家/地区的物种列表

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