Linq to SQL忽略了第一个数据库记录

时间:2014-09-22 07:53:17

标签: c# sql linq

我在尝试查询表时遇到了一个非常奇怪的问题,我刚刚进入我们的数据库,用作MVC 4应用程序的自定义角色提供程序。

我有三个表,User,Role和UserRoles。目前,出于测试目的,我在数据库中只有一个角色,ID = 1。

在UserRoles表中,我有两条记录,

  1. userRoleID 1,userID = 1,roleID = 1。
  2. userRoleID 2,userID = 14,roleID = 1。
  3. 现在,当尝试运行以下linq(硬编码用于测试和示例目的)时,它将永远不会返回数据库中的第一条记录(userRoleID = 1)

       var userRoles = from ur in _db.UserRoles
                       join r in _db.Roles on ur.roleID equals r.roleID into rj
                              from subR in rj.DefaultIfEmpty()
                       join u in _db.Users on ur.userID equals u.userID into uj
                              from subU in uj.DefaultIfEmpty()
    
                       where ur.userID == 1
                       select ur;
    

    因此在此示例中,代码返回null。如果我将where子句更改为ur.userID = 14,那么它将按预期返回第二条记录。

    如果我然后切换数据库记录,使它们变为

    1. userRoleID 1,userID = 14,roleID = 1。
    2. userRoleID 2,userID = 1,roleID = 1。
    3. 它现在只会返回userID 1的记录。有人遇到过这个问题,因为我不知道如何继续。

      感谢。

1 个答案:

答案 0 :(得分:0)

你能告诉我第一张唱片是什么吗?以及你如何切换它们"如果一个表和一个查询结果,根据SQL标准中的定义,是否为ORDER?

如果您需要订单,请按顺序输入。否则,SQL Server将以其喜欢的顺序返回结果。这是基础 - 基于SQL设置,SETS没有内在顺序。