复杂Linq查询

本文关键字:查询 Linq 复杂 | 更新日期: 2023-09-27 18:08:58

我有一个包含对象命名为:Flight

包含:

List<Segement> Segements
List<Passenger> Pax      
List<Award> Awards

每个奖项包含:

List<Segment> Segements
Passenger Pax

我想检查段和Pax的所有组合(从飞行对象中获取),然后将它们与每个奖项中的现有组合进行比较。因此,最后我将得到一个列表,其中的奖项组合不存在于任何奖项对象

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

复杂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 } };

显然,我对如何识别个别乘客和区段做了一些假设。此外,当直接查询实体框架数据源时,如果此查询按原样工作,我会感到非常惊讶。