为什么LINQ中的连接会在C#中生成额外的对象?

时间:2014-08-17 01:24:42

标签: c# linq ienumerable

我知道标题听起来很糟糕,我相信这有一个非常简单的解释,但我现在正在失去理智。

我正在使用Linq进行交叉查询:

    var result = from item1 in em1.EmailBindingList
                 join item2 in em2.EmailBindingList

                 on item1.Header equals item2.Header
                 select item1;

(em1和em2都有15875项,两者都相同)以上应该会给我15875项的结果。

然而,我得到15879

看看pic。我真的不明白。 Why

请参阅下面的cdhowie评论。他为我解决了这个问题。谢谢。

1 个答案:

答案 0 :(得分:3)

听起来你在一个或两个列表中都有一些具有相同标题的元素,从而产生了笛卡尔积。

您可以通过查看em1.EmailBindingList.Select(i => i.Header).Distinct().Count()的结果来验证这一点,对于em2也是如此。如果其中任何一个产生低于15875的值,那么这几乎肯定是原因。