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();
Другие вопросы по тегам