Я создаю базу данных с использованием ASP.NET, в которой есть два класса: Countries и Species. Модель видов содержит ICollection типа Country, и я пытаюсь разрешить строку поиска в представлении индекса видов, чтобы проверять не только названия видов, но и то, если пользователь вместо этого вводит имя страны, чтобы возвращать виды, которые Коллекции стран включают страну с именем, которое соответствует строке поиска:
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:
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 вы получите список видов, у которых есть страны вашей строки поиска.
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)));
}
}