Reputation: 31
I have two lists. See my code below:
public class Person
{
public string Name { get; set; }
public int ItemOneId { get; set; }
public int ItemTwoId { get; set; }
}
public class Item
{
public int ItemOneId { get; set; }
public int ItemTwoId { get; set; }
}
List<Person> persons = new List<Person>
{
new Person
{
Name = "a",
ItemOneId = 11,
ItemTwoId = 23
},
new Person
{
Name = "c",
ItemOneId = 11,
ItemTwoId = 56
},
new Person
{
Name = "d",
ItemOneId = 109,
ItemTwoId = 59
}
};
List<Item> items = new List<Item>
{
new Item
{
ItemOneId = 11,
ItemTwoId = 56
},
new Item
{
ItemOneId = 1,
ItemTwoId = 2
}
};
I would like to get all persons from persons list where ItemOneId and ItemTwoId don't exist on items list. I have below code - is better solution?
List<Person> result = new List<Person>();
foreach(Person person in persons)
{
if (!items.Any(x => x.ItemOneId == person.ItemOneId && x.ItemTwoId == person.ItemTwoId))
{
result.Add(person);
}
}
Or maybe there is no other solution?
Upvotes: 0
Views: 1303
Reputation: 1312
The code below should work!
var result = persons.Where(p => !items.Any(x => x.ItemOneId == p.ItemOneId && x.ItemTwoId == p.ItemTwoId);
Upvotes: 2