编写LINQ查询以遍历多个表
我想基于下面的SQL编写一个LINQ查询 基本上,这个策略看起来真的很混乱-为什么从MerchantGroupMerchant开始,然后做2个“from”语句 问题:有没有更简单的方法来编写这个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
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查询非常可读