#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:
По моему мнению, для этого есть два способа.
- Вместо использования join используйте .Содержит() метод string
List<string> WordInMessage = e.ChatMessage.Message.Split(' ').ToList();
var items = (from x in TrigerWorlds
where WordInMessage.Contains(x)
select x).ToList():
- Нет необходимости преобразовывать 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();