从LINQ查询返回匿名类型?

时间:2012-07-06 08:02:05

标签: c# linq linq-to-sql compiler-errors return-type

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

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&lt;   AnonymousType#1&GT;”到'System.Linq.IQueryable&lt; spaBL.roleHasRight&GT;'

2 个答案:

答案 0 :(得分:3)

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

select new { obj,role.roleName}

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

e.g。

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() {
...
}

答案 1 :(得分:0)

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

select new RoleHasRight
{
    obj,
    role.roleName
}).ToList();