Запрос Linq с синтаксисом метода необходим для двух списков с типом List<string>
var fullMessagesList = new List<string>(){
"This is Apple",
"This is mango",
"This is a Lemon",
"This is a Orange"
};
var partialMessagesList = new List<string>(){
"Apple",
"mango",
};
Мне нужен запрос linq с синтаксисом метода с возвратами "Это лимон", "Это апельсин" из fullMessagesList. Мне нужно проверить для содержит () для каждого текста в другом списке.
Я написал его, используя циклы foreach старой школы, но мне нужно вычислить его с помощью linq, используя синтаксис метода.
var unknownFruites = new List<string>();
foreach (var message in fullMessagesList)
{
var flag = 1;
foreach (var partialmessage in partialMessagesList)
{
if (message.Contains(partialmessage))
{
flag = 0;
break;
}
}
if (flag == 1)
{
unknownFruites.Add(message);
}
}
2 ответа
Решение
var unknownFruites = fullMessagesList.Where(
message => !partialMessagesList.Any(
p => message.IndexOf(p, StringComparison.InvariantCultureIgnoreCase) >= 0
)
);
Английская интерпретация этого кода будет "выбирать все сообщения, где сообщение не содержит строки в списке частичных сообщений".
Если вы хотите игнорировать регистр:
var unknownFruites = fullMessagesList.Where(
message => !partialMessagesList.Any(p => string.Compare(p, message, true) == 0)
);