2010-06-09 144 views
2

我是新来的linq,我试图将数据绑定到匿名类型。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 
    { 
    } 

后来,当我数据绑定,或者尝试通过收集迭代,我得到在运行时的“参数类型不匹配”的错误。

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

+1

此错误,如果你只是遍历它在获取结果,即没有数据绑定是否还在查询失败? – 2010-06-09 16:23:20

+0

是的,我放了一个foreach,它第一次看到它就死了。 – 2010-06-09 16:49:04

+0

如果你在调试器中检查'myDeal'的类型是什么? – ChrisF 2010-06-09 16:51:39

回答

2

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 
        }); 

您也可以尝试这样的事:

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 
     }); 

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

我还没有测试过,这只是我的头顶。

好运,

Patrick。

+0

谢谢帕特里克我会试试看! – 2010-06-09 16:56:47

+0

我无法得到它的工作:(回到这个活动记录 谢谢反正。 – 2010-06-11 14:56:45

1

“参数类型不匹配”错误通常是由我们想要绑定的属性与其元素之间的不匹配类型引起的。在RadGridSparkline

实施例中,当我们希望其产品源结合

“值”类型必须是双。

如果我们将Value属性定义为如下 public decimal ContractValue {set;得到; }

将显示

相关问题