0

在业务逻辑层中,我创建了一个这样的类:

public List<roleHasRight> SelectAllData()
{
    try
    {
        return (from obj in Data.roleHasRights
                 join role in Data.roles on obj.FK_roleId equals role.roleId
                 select new
                 {
                     obj,
                     role.roleName
                 }).ToList();
    }
    catch
    {
        return null;
    }
}

那么我的返回SelectAllData方法类型是什么?

SelectAllData没有List<roleHasRight>作为返回类型它会给出一个错误:

无法将类型 System.Linq.IQueryable < AnonymousType#1>' 隐式转换为 'System.Linq.IQueryable < spaBL.roleHasRight>'

4

2 回答 2

3

您正在使用以下方法创建一个新的匿名类型:

select new { obj,role.roleName}

这种类型有 2 个属性(rolename 和 roleHasRights 对象)。为了能够通过该方法返回相同的信息,您需要使用此信息创建一个类,或者返回一个动态的。

例如

public class RoleHasRightInfo {
   public string Rolename {get;set;}
   public roleHasRight Right {get;set;}

}

并在 linq 表达式中创建它,如下所示:

select new RoleHasRightInfo(){ Right=obj,Rolename = role.roleName}

然后该方法需要返回这种新类型的 List:

public List<RoleHasRightInfo> SelectAllData() {
...
}
于 2012-07-06T08:08:50.650 回答
0

如果你返回 RoleHasRight 你需要构造它,而不是像现在这样的匿名类型:

select new RoleHasRight
{
    obj,
    role.roleName
}).ToList();
于 2012-07-06T08:14:31.677 回答