Написание запроса LINQ для обхода многих таблиц - PullRequest
1 голос
/ 14 февраля 2011

Я хотел написать запрос LINQ на основе приведенного ниже SQL.

По сути, эта стратегия кажется очень запутанной - зачем начинать с MerchantGroupMerchant и делать 2 оператора "из"?

Проблема: Есть ли более простой способ написать этот запрос LINQ?

var listOfCampaignsMerchantIsInvolvedIn =
    (from merchantgroupactivity in uow.MerchantGroupActivities
     from merchantgroupmerchant in uow.MerchantGroupMerchants
     where merchantgroupmerchant.MerchantU.Id == merchantUIDGuid  
     select new
     {
         merchantgroupactivity.ActivityU.CampaignU.Id
     }).Distinct();

Вот структура таблицы: enter image description here

и SQL:

SELECT DISTINCT Campaign.ID
    FROM Campaign 
    INNER JOIN Activity
        ON ( Campaign.CampaignUID = Activity.CampaignUID )
    INNER JOIN MerchantGroupActivity
        ON ( Activity.ActivityUID = MerchantGroupActivity.ActivityUID )
    INNER JOIN MerchantGroup
        ON ( MerchantGroup.MerchantGroupUID =  MerchantGroupActivity.MerchantGroupUID )
    INNER JOIN MerchantGroupMerchant
        ON ( MerchantGroupMerchant.MerchantGroupUID = MerchantGroup.MerchantGroupUID )
    INNER JOIN Merchant
        ON ( Merchant.MerchantUID = MerchantGroupMerchant.MerchantUID )
    WHERE Merchant.ID = 'M1'

1 Ответ

0 голосов
/ 14 февраля 2011

Нет, не совсем, даже если вы используете представления для частичного или полного уменьшения размера запроса, ваш план выполнения все равно будет выглядеть в конце (и выполняться так же быстро / медленно). Если вам нужно пересечь 5 объединений, то вам нужно пересечь 5 объединений, единственное лекарство - это «закорочение» модели путем введения связей между, скажем, торговцем и деятельностью или торговцем и кампанией. Вы можете сделать это, введя между ними таблицу M2M (за счет ручного обслуживания), но я бы не рекомендовал этого, если поиск не является действительно проблемой. Если этот запрос слишком медленный, вам следует проверить наличие индексов во всех полях FK соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...