У меня есть массив ключевых слов: splitKeywords = { "KeywordA", "KeywordB", "KeywordC"}Альтернативная реализация для Foreach с использованием выражения Linq
И сущность KeywordSearch:
public class KeywordSearch
{
// Primary properties
public int Id { get; set; }
public string Name { get; set; }
// Navigation properties
public Keyword Keyword { get; set; }
}
Где Ключевое слово является:
public class Keyword
{
// Primary properties
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<KeywordSearch> KeywordSearches { get; set; }
}
Как я могу построить массив KeywordIds на основе всех macthing KeywordSearch-х?
У меня это очень uggly код:
var keywordSearchQuery = _keywordSearchRepository.Query;
List<int> keywordIds = new List<int>();
foreach (var keyword in splitKeywords)
{
var keywordsFound = keywordSearchQuery.Where(kws => kws.Name == keyword).Select(kws => kws.Keyword.Id);
if (keywordsFound.Count() == 0)
{
keywordIds.Clear();
return null;
}
else
{
keywordIds.AddRange(keywordsFound);
}
}
Я имел этот один, но он возвращает любые совпадающие ключевые слова:
keywordIds = keywordSearchQuery.Where(ks => splitKeywords.Contains(ks.Name)).Select(ks => ks.Keyword.Id);
EDIT:
Пример:
KeywordSearch = { 1, "KEYWORDA", { 1, "KeywordA" }},
{ 2, "KEYWORDB", { 2, "KeywordB" }},
{ 3, "KEYWORDC", {3, "KeywordC" }}
If I search for "KEYWORDA", I get KeywordId = 1
If I search for "KEYWORDA KEYWORDB", I get KeywordId = 1,2
If I search for "KEYWORDA KEYWORDX", I get NULL
Как определить 'keywordSearchQuery'? – paqogomez
Привет, спасибо. Он определен как «var keywordSearchQuery = _keywordSearchRepository.Query;» – Patrick
Что такое тип 'keywordSearchQuery'? –