Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写LINQ查询以遍历多个表_Linq_Linq To Sql - Fatal编程技术网

编写LINQ查询以遍历多个表

编写LINQ查询以遍历多个表,linq,linq-to-sql,Linq,Linq To Sql,我想基于下面的SQL编写一个LINQ查询 基本上,这个策略看起来真的很混乱-为什么从MerchantGroupMerchant开始,然后做2个“from”语句 问题:有没有更简单的方法来编写这个LINQ查询 var listOfCampaignsMerchantIsInvolvedIn = (from merchantgroupactivity in uow.MerchantGroupActivities from merchantgroupmerchant in uow.Me

我想基于下面的SQL编写一个LINQ查询

基本上,这个策略看起来真的很混乱-为什么从MerchantGroupMerchant开始,然后做2个“from”语句

问题:有没有更简单的方法来编写这个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();
以下是表格结构:

而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'

不,不是真的,即使您使用视图部分或完全减小查询大小,您的执行计划最终看起来还是一样(并且执行速度也一样快/一样慢)。如果您必须遍历5个连接,那么您必须遍历5个连接,唯一的解决方法是通过引入商家与活动或商家与活动之间的链接来“缩短”模型。您可以通过在它们之间引入M2M表(以手动维护为代价)来实现这一点,但我不建议这样做,除非检索确实是一个问题。如果此查询太慢,则应检查所有join FK字段上是否存在索引

创建一个视图,然后应用Linq2Sql。这当然是一个选项,但理想情况下,我现在想保留LINQ查询中的所有内容。我不想在这里追求性能!只是查询的可读性。数据库的结构已设置,因此无法更改。理想情况下,我想要一个更简单的LINQ查询……好吧,我不认为您可以在这里做得更简单,您已经在使用两个from语句的技巧(通过中介),如果使用一个from语句,您将需要在join中指定这两个from语句,从而使查询更长。如果您知道multiple-from语句代表什么(来自所有源的所有对象的每个组合),那么您的LINQ查询非常可读