Элементы C # проверяются из списка модели и возвращают определенный параметр из модели

#c#

#c#

Вопрос:

Я пытаюсь проверить, e.ChatMessage.Message содержит ли какая-либо строка из какой-либо TrigerWorld(WorldToTrigger) модели TrigerWord . И он должен возвращать правильную фразу ( FrazeCoSeObjevi ) из TrigerWords. Я попробовал это вот так.

Спасибо за любой ответ.

 List<string> WordInMessage = e.ChatMessage.Message.Split(' ').ToList();

foreach (var item in WordInMessage)
{
    var items = (from x in TrigerWorlds
                 join y in WordInMessage on x.Source equals y
                 select x).ToList():
}
  

Существует класс model:

 namespace FaxSoftware
{
    public class TrigerWorlds
    {
        public string WorldToTriger { get; set; }
        public string FrazeCoSeObjevi { get; set; }
    }
}
  

Комментарии:

1. В чем, по-видимому, проблема? Может быть, выбрать x.FrazeCoSeObjevi?

Ответ №1:

Почему бы не использовать .Intersect() ?

 var triggerWords = new List<string> {"hello", "world"};
var words = e.ChatMessage.Message.Split(' ').ToList();

var hasTrigger = words.Intersect(triggerWords).Any()
  

Это выдаст вам логическое значение, если в сообщении есть какое-либо триггерное слово.

Смотрите документацию: https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.пересекаются?view=netcore-3.1#code-try-2

Ответ №2:

По моему мнению, для этого есть два способа.

  1. Вместо использования join используйте .Содержит() метод string
 List<string> WordInMessage = e.ChatMessage.Message.Split(' ').ToList();

 var items = (from x in TrigerWorlds
               where WordInMessage.Contains(x)
                 select x).ToList():
  
  1. Нет необходимости преобразовывать e.ChatMessage.Сообщение в список строк.
 var items = (from x in TrigerWorlds
               where e.ChatMessage.Message.Contains(x)
                 select x).ToList():
  

Ответ №3:

Я предполагаю, что у вас есть коллекция объектов TrigerWorlds, и вы хотите получить список тех, у которых есть соответствующее слово в World в сообщении

Вам не нужен цикл For. Вы можете просто использовать это

     var items = (from x in triggerCol
                 join y in WordInMessage on x.WorldToTriger equals y
                 select x).ToList();