c # лямбда-выражение для удаления элементов из списка на основе заданных условий в другом списке - PullRequest
4 голосов
/ 27 мая 2011

Скажем, у меня есть IList<int> ProductIds, который я передаю очень медленному веб-сервису.Этот вызов будет выглядеть следующим образом:

var WebServiceResponse = client.SomeCall(ProductIds);

Список целых будет содержать все идентификаторы продукта для данной страницы.

У меня есть другой список, скажем IList<Product>, где Product содержит int ProductId собственность участника.Я хочу позвонить в мой веб-сервис, но перед этим я хочу удалить каждый элемент из ProductIds, у которого есть Product в моем другом списке с соответствующим ProductId.Есть ли один лайнер, который может сделать это для меня, или я должен запустить цикл?Я пробовал все виды вещей, но ничего не компилируется.Я все еще плохо знаком с лямбда-выражениями, так что, надеюсь, это торт.

Ответы [ 2 ]

4 голосов
/ 27 мая 2011
var list = new List<Product>(); //or wherever you get it from
var otherIDs = list.Select(p => p.ProductId);
var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i)); 

Если ваша веб-служба специально использует List или IList, вам нужно добавить ToList в конце:

var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i).ToList()); 
0 голосов
/ 27 мая 2011
var excluded = ListA.Where(p=>!ListB.Contains(pb=>pb.Id == p.Id));

Может быть немного по-другому, если ListB только Ids, тогда это будет просто! ListB.Contains (p.Id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...