当我在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总是表现的方式?当然不是 - 如果我用.Distinct()
返回500行,这是否意味着没有它返回2,500行?这会影响性能吗?
答案 0 :(得分:3)
这是一个构建不良的查询
您将LandlordPreferences
与Tenants
一起加入布尔值而不是外键。
所以,最有可能的是,你有5个选定的土地领主和5个学生的租户。每位学生将返回每位土地领主:5 x 5 = 25.这是一个cartesian product,与LINQ无关。 SQL中的类似查询行为相同。
如果你要将土地领主添加到你的结果(select new { Tenant = t, Landlord = l }
),你会发现没有两个结果实际上是相同的。
如果您无法以某种方式修复查询,Distinct
是您唯一的选择。