复杂的Linq查询

时间:2011-09-19 18:49:23

标签: c# linq

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

它包含:

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

每个奖项包含:

List<Segment> Segements
Passenger Pax

我想检查Segements和Pax的所有组合(取自Flight obj),然后将它们与每个Award中的现有组合进行比较。 最后,我将获得一份奖项清单,其中任何奖项对象都不存在

我想知道如何在一个linq查询中执行此操作

2 个答案:

答案 0 :(得分:3)

这样的东西?

    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);

答案 1 :(得分:1)

认为这个单一查询将产生所需的结果:

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

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