C# 复杂Linq查询

C# 复杂Linq查询,c#,linq,C#,Linq,我拥有并包含名为:Flight的对象 它包括: List<Segement> Segements List<Passenger> Pax List<Award> Awards 列出分段 列名帕克斯 列出奖项 由于每个奖项包含: List<Segment> Segements Passenger Pax 列出分段 乘客座 我想检查分段和Pax的所有组合(取自飞行obj),然后将它们与每个奖励中的现有组合进行比较。 因此,最后我将获

我拥有并包含名为:Flight的对象

它包括:

List<Segement> Segements
List<Passenger> Pax      
List<Award> Awards
列出分段
列名帕克斯
列出奖项
由于每个奖项包含:

List<Segment> Segements
Passenger Pax
列出分段
乘客座
我想检查分段和Pax的所有组合(取自飞行obj),然后将它们与每个奖励中的现有组合进行比较。 因此,最后我将获得一个奖项列表,其组合不存在于任何奖励对象中

我想知道如何在一个linq查询中这样做

    var flight = new Flight();
    var x = from s in flight.Segements
            from p in flight.Pax
            select new
    {
        Pax = p ,
        Segemnt = s
    };

    var y = from a in flight.Awards
            from s in a.Segements
            select new
    {
        Pax = a.Pax,
        Segemnt = s
    };

    var result = x.Except(y);
我认为这个查询将产生所需的结果:

var query = 
    from f in flights
    from p in f.Pax
    from s in f.Segements
    from a in f.Awards
    where !((a.Pax.Name == p.Name) && (a.Segements.Select(_ => _.Id).Contains(s.Id)))
    select new Award { Pax = p, Segements = new[] { s } };

显然,我对如何识别个别乘客和区段做了一些假设。另外,如果这个查询在直接查询实体框架数据源时仍然有效,我会非常惊讶。

segment和pax list不是分开的吗?你到底在寻找什么?每个乘客在每个奖项中可以有多个赛段。奖励是乘客和他的分段的组合。该航班包含所有乘客和所有可用的分段。我想得到所有可能的赛段和乘客的组合,但赛段(?)和帕克斯没有任何共同之处。它们在不同的列表中。你如何决定哪个区段属于哪个乘客?你能解释一下分段是什么吗?提供一些示例数据,告诉我们你想做什么,这不是100%清楚。每个奖项都包含这一点-一个帕克斯有他的分段