LINQ to SQL Joining Query返回1而不是0

时间:2011-12-28 07:03:53

标签: c# linq linq-to-sql join left-join

这两个查询之间有什么区别?

我从codes1.Count()获得0,但是从codes2.Count()获得1,但两者都应为0。

 IQueryable<SecurityCode> codes1 = (from user in dataBase.SecurityUsers
                         from code in user.SecurityCodes
                         where user.UsrUserName.Equals(code.UsrUserName)
                               && user.UsrPhone.Equals(phone)
                         select code);


 IQueryable<SecurityCode> codes2 = (from user in dataBase.SecurityUsers
                               where user.UsrPhone.Equals(phone)
                         select user.SecurityCodes.FirstOrDefault());

关系显示在

下面

任何解释都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

FirstOrDefault将始终返回1个元素,无论它是否存在。所以你的第二个查询将始终返回元素。 (每个用户一个)

答案 1 :(得分:0)

任何集合的FirstOrDefault()意味着您将始终获得一个结果。该结果将是遇到的第一个结果,如果未找到结果,则为默认值。

如果更改第二个查询以消除FirstOrDefault(),则两个查询的计数应产生相同的结果。