【问题标题】:Efficient way to select rows with n to n relationship选择具有 n 到 n 关系的行的有效方法
【发布时间】:2015-01-18 15:18:51
【问题描述】:

我有以下关系:

我想从 Ads 中选择与 FeaturesOfAds 相关的所有行,所以我这样做:

query = from ad in query
        join featureOfAd in db.FeaturesOfAds on ad.AdId equals featureOfAd.AdId
        where options.FeatureIds.Contains(featureOfAd.FeatureId)
        select ad;

options.FeatureIds 是一个 int 数组。它可以工作,但问题是结果返回了很多重复的行,我需要进行Distinct 调用,我担心它在高负载和数千行的情况下可能会表现不佳。所以我想知道是否有更好更有效的方法来做到这一点。

【问题讨论】:

  • 重复是否只针对特定列?

标签: .net sql-server performance linq entity-framework


【解决方案1】:

您应该按 AdID 对结果进行分组,以获得不同的值。 可能不会有更好的解决方案然后加入小组。您可以尝试 Exists,但我怀疑它会慢得多。

var result = (from a in Ads
join foa in FeatureOfAds on a.AdID equals foa.AdID
where FeatureIDs.Contains(foa.FeatureID)
group a by a.AdID into gr
select gr.Key).ToList();

var result = (from a in Ads
where a.FeatureOfAds.Any(c=>FeatureIDs.Contains(c.FeatureID))
select a.AdID).ToList();

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2022-08-14
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多