0

当我在 LinqPad 中使用以下 Linq 查询时,会返回 25 个结果:

var result = (from l in LandlordPreferences
          where l.Name == "Wants Student" && l.IsSelected == true
          join t in Tenants on l.IsSelected equals t.IsStudent
          select new { Tenant = t});
result.Dump();

当我添加.Distinct()到最后时,我只返回 5 个结果,所以,我猜当使用上述方法时,我会得到每个结果的 5 个实例。

我是 Linq 的新手,所以我想知道这是否是因为查询构建不佳?还是这是 Linq 一直以来的行为方式?当然不是 - 如果我返回 500 行.Distinct(),这是否意味着没有它返回 2,500?这会影响性能吗?

4

1 回答 1

3

这是一个构建不佳的查询。
您正在加入布尔值LandlordPreferencesTenants不是外键。因此,最有可能的是,您有 5 个选定的地主和 5 个学生租户。每个学生将针对每个地主返回:5 x 5 = 25。这是一个笛卡尔积,与 LINQ 无关。SQL 中的类似查询的行为相同。

如果您将地主添加到您的结果 ( select new { Tenant = t, Landlord = l }) 中,您会发现没有两个结果实际上是相同的。

如果您无法以某种方式修复查询,Distinct这是您唯一的选择。

于 2013-02-19T20:51:26.870 回答