Как искать свойство свойства Navigation - PullRequest
0 голосов
/ 13 июня 2018

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

Значения типа 'collection [NSDBz.DAL.Country (Nullable = True, DefaultValue =)]'не может быть преобразован в строку.

Я вижу, что задаются аналогичные вопросы, но их требования немного сложнее, поэтому я не могу применить свои решения на своем нынешнем уровне навыков.к моей проблеме здесь.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Согласно вашему требованию, вам нужны виды с округами 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)));    
    }
}
0 голосов
/ 13 июня 2018

Судя по вашей ошибке, вы пытаетесь сравнить коллекцию Countries со строкой, а не проверять, есть ли у какой-либо из стран в коллекции совпадающее имя.Я бы предложил попробовать что-то похожее на следующее:

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