c# - 从LINQ查询返回匿名类型?

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

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>作为返回类型,它将给出一个错误:

Cannot implicitly convert type System.Linq.IQueryable < AnonymousType#1>' to 'System.Linq.IQueryable < spaBL.roleHasRight>'

最佳答案

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

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

https://stackoverflow.com/questions/11358200/

相关文章:

node.js - 编译 Node 给出 “No-old-style-declaration”标志错

compiler-errors - 为什么 'dsgaudiko'有效的PHP?

boost - 使用复合键从 multi_index_container 中删除每个键的元素

c# - 'System.Data.Objects.ObjectContext'不包含带有0个参数的

c++ - C++模板泛型(模板参数列表)

android - 从现有代码创建新项目

f# - 编译错误提示值不是函数

winforms - C++ CLI KeyDown::raise 错误 error C3767 候

c# - “does not contain a static '主要' method”错误

c# - 通用 - 编译器警告 CS0693 或错误