LINQ содержит синтаксис со списком<string>
У меня есть список идентификаторов, размещенных с сообщением HTTP на странице *.aspx. На сервере я пытаюсь сравнить этот список со списком объектов, чтобы увидеть, для каких объектов их поле PrimaryKey ID отсутствует в опубликованных идентификаторах (он же удаляет) и идентификаторах из списка, у которых нет соответствующих объектов (добавлений). Вот мой LINQ, чтобы получить удаление:
List<string> ids = new List<string>(txtParticipants.Value.Split(','));
List<NetworkEvent> deletes = e.NetworkEvent.Where(c =>
!ids.Contains(c.NetworkID.ToString())).ToList<NetworkEvent>();
Этот запрос на удаление работает нормально. Моя проблема порождает обратное, добавляет. Вот моя попытка (с которой мне нужна помощь). Вопрос в том, как ссылаться на строку из списка в предикате Contains()? Очевидно, что само по себе неправильно, но как я могу сослаться на это?
List<string> adds = newids.Where( c=> (e.NetworkEvent.Select
(z=> z.NetworkID ).Contains( int.Parse(c) ));
Надеюсь, мой вопрос имеет смысл (?!). Благодарю.
3 ответа
Пытаться:
var itemsAlreadyAdded = new int[] { 2, 4, 6 };
var newIds = new string[] { "2", "3" };
var itemsToAdd = newIds.Except(itemsAlreadyAdded.Select(iaa => iaa.ToString()));
foreach (var item in itemsToAdd)
{
Console.WriteLine(item);
}
Console.ReadLine();
Для удаления вы можете использовать "!Contains", как вы только что сделали.
Для добавления просто используйте то же выражение, но в обратном порядке (т. Е. Переверните два списка).
Другими словами: список № 1! Содержит вещи в списке № 2 ==>
- элемент в списке № 2 удален из списка № 1, или
- элемент в списке № 2 для вставки в список № 1
Итак, вы видите, что одно и то же выражение имеет зеркальные значения.
Вы также можете использовать! Существует или! Любое место! Содержит.
Ты можешь попробовать:
List<string> adds = newids.Where(id => !e.NetworkEvent.Any(e => e.NetworkID.ToString() == id)).ToList();