我是 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)
然后,当我进行数据绑定或尝试迭代集合时,我在运行时收到“参数类型不匹配”错误。
我不确定这里发生了什么事。
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。
我还没有测试过这个,这只是我的想法。
祝你好运,
帕特里克.