LINQ,“参数类型不匹配”错误,这是什么意思,我该如何解决它?

Bif*_*iff 4 c# linq subsonic3

我是 linq 的新手,我正在尝试将数据绑定到匿名类型。

我使用 SubSonic 3.0 作为我的 DAL。

我正在从 2 个表中进行选择,如下所示

        var myDeal = (from u in db.Users
                  select new
                      {
                          UserID = u.UserID,
                          UserRoleID = (from ur in u.UserRoles where u.UserRoleID == ur.UserRoleID select ur).FirstOrDefault().UserRoleID
                      });
    foreach (var v in myDeal) //dies first time here
    {
    }
Run Code Online (Sandbox Code Playgroud)

然后,当我进行数据绑定或尝试迭代集合时,我在运行时收到“参数类型不匹配”错误。

我不确定这里发生了什么事。

Pat*_*ick 5

ID 字段之一可以为空吗?

如果是这样,您需要访问 .Value 属性

var myDeal = (from u in db.Users 
        join ur in     
              select new 
                   { 
                     UserID = u.UserID, 
                     UserRoleID = (from ur in u.UserRoles where u.UserRoleID.Value equals ur.UserRoleID select ur).FirstOrDefault().UserRoleID 
                    });
Run Code Online (Sandbox Code Playgroud)

你也可以尝试这样的事情:

var myDeal = (from u in db.Users
         join ur in db.UserRoles
        on new {ID = u.UserRoleID.value} equals new {ID = ur.UserRoleID} into tempRoles
        from roles in tempRoles.DefaultIfEmpty()
        select new
        {
           UserID = u.UserID, 
                 UserRoleID = roles.UserRoleID
        }); 
Run Code Online (Sandbox Code Playgroud)

您使用 tempRoles 执行左外连接。因此,如果没有分配角色,您仍然可以获得用户 ID。

我还没有测试过这个,这只是我的想法。

祝你好运,

帕特里克.