Search code examples
linqjoinlinq-group

Linq and grouping with three tables


I've come up with the following LINQ, but I can't help thinking that I should be able to do this in one query instead of two. Can anyone help?

The idea is to inner join three tables and group by one.

var q1 = from er in ExportRules
    join per in PlaceExportRules on er.ExportRulesID equals per.ExportRulesID
    select new 
    {
        PlaceID = per.PlaceID, 
        Description = er.Description, 
        Tag = er.TagName,
        ExportName = per.ExportName,
        ExportAddress = per.ExportAddress
    };

var q2 = from p in Places 
    join rules in q1 on p.PlaceID equals rules.PlaceID into joined2
    where joined2.Any()
    orderby p.PlaceName
    select new {Place = new {p.PlaceID, p.PlaceName}, joined2};

Solution

  • Well, you can just bracket things:

    var query = from p in Places
                join rules from 
                     (from er in ExportRules
                      join per in PlaceExportRules 
                        on er.ExportRulesID equals per.ExportRulesID
                      ...)
                  on p.PlaceId equals rules.PlaceId into joined2
                where joined2.Any()
                orderby p.PlaceName
                select new {Place = new {p.PlaceID, p.PlaceName}, joined2};
    

    However, I'd personally probably leave it as two queries. It's clearer, and won't affect the performance - it's not like the first statement in your code would actually execute the query.