I have the below two classes:

```
public class FirstInner
{
    public int Id { get; set; }
    public string Type { get; set; }
    public string RoleId { get; set; }
}
public class SecondInner
{
    public int Id { get; set; }
    public string Type { get; set; }            
}

```

Again, there are lists of those types inside the below two classes:

```
public class FirstOuter
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public List<FirstInner> Inners { get; set; }
}
public class SecondOuter
{
    public int Id { get; set; }
    public string Name { get; set; }         
    public List<SecondInner> Inners { get; set; }
}

```

Now, I have list of `FirstOuter` and `SecondOuter`. I need to check if `FirstOuter` list is a subset of `SecondOuter` list.

Please note:

1. The names of the classes cannot be changed as they are from different systems.
2. Some additional properties are present in `FirstOuter` but not in `SecondOuter`. When comparing subset, we can ignore their presence in `SecondOuter`.
3. No.2 is true for `FirstInner` and `SecondInner` as well.
4. List items can be in any order---`FirstOuterList[1]` could be found in `SecondOuterList[3]`, based on Id, but inside that again need to compare that `FirstOuterList[1].FirstInner[3]`, could be found in `SecondOuterList[3].SecondInner[2]`, based on Id.

I tried Intersect, but that is failing as the property names are mismatching. Another solution I have is doing the crude `for each` iteration, which I want to avoid.

Should I convert the `SecondOuter` list to `FirstOuter` list, ignoring the additional properties?

---

Basically, here is a test data:

```
var firstInnerList = new List<FirstInner>();
firstInnerList.Add(new FirstInner
{
    Id = 1,
    Type = "xx",
    RoleId = "5"
});
var secondInnerList = new List<SecondInner>();
secondInner.Add(new SecondInner
{
    Id = 1,
    Type = "xx"
});
var firstOuter = new FirstOuter 
{
    Id = 1,
    Name = "John",
    Title = "Cena",
    Inners = firstInnerList
}
var secondOuter = new SecondOuter
{
    Id = 1,
    Name = "John",
    Inners = secondInnerList,
}
var firstOuterList = new List<FirstOuter> { firstOuter };
var secondOuterList = new List<SecondOuter> { secondOuter };

```

Need to check if `firstOuterList` is part of `secondOuterList` (ignoring the additional properties).