Linq и группировка с тремя таблицами

Я придумал следующий LINQ, но не могу отделаться от мысли, что смогу сделать это в одном запросе, а не в двух. Кто-нибудь может помочь?

Идея состоит в том, чтобы внутренне объединить три таблицы и сгруппировать их по одной.

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

person David Hyde    schedule 21.06.2012    source источник
comment
Вам не нужно делать это в одном запросе, все они будут выполняться только один раз (неявно он будет преобразован в один запрос, когда вы пытаетесь получить данные по ToList, ...).   -  person Saeed Amiri    schedule 21.06.2012


Ответы (1)


Ну, вы можете просто заключить в скобки:

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

Однако лично я, вероятно, оставил бы это как два запроса. Это понятнее и не повлияет на производительность — первый оператор в вашем коде не будет фактически выполнять запрос.

person Jon Skeet    schedule 21.06.2012
comment
Спасибо @jonskeet, мне этого хватит. - person David Hyde; 21.06.2012