Установите разницу с помощью LINQ - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть два списка - один включает только строки, другой - экземпляры, включая строковое свойство, т. Е. Name - я хочу перенести на них операцию задания разности.

var diff = request.MyStringList.Where(name => !request.Records.Select(x => x.Name).Contains(name));

Например,

  • MyStringList содержит "jack", "aaron", "abraham"
  • Записи Name s "denny", "aaron", "abraham", "michael"

Я ожидаю, что diff будет включать просто "jack". В чем моя проблема?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

попробуйте использовать, кроме

request.MyStringList.Except(request.Records.Select(x => x.Name));
0 голосов
/ 01 апреля 2020

Помимо, кроме другого параметра Any для проверки включения:

var diff = request.MyStringList.Where(name => !request.Records.Any(x => x.Name == name));

Это вернет дубликаты, которые Except может (будет) удалять.

В качестве альтернативы левое соединение сшивать предметы вместе. В синтаксисе запроса:

var diff = 
    from name in request.Records
    join r in request.Records on name equals r.Name into rtmp
    from r in rtmp.DefaultIfEmpty()
    where r == null
    select name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...