找不到 linq 查询输出的正确返回类型



>我有以下方法返回 LINQ 查询的输出。该方法工作得很好,但我有动态作为返回类型,因为以下 2 个不起作用:List & IEnumerable。LINQ 查询输出的正确返回类型应该是什么?我的方法:

public dynamic GetUserFollowers(Guid user_gd)
{
var listOfFollowers = from users in _context.Users
from userFollowing in _context.UserFollowings.Where(
uf => uf.User2 != users.Gd && uf.User2 == user_gd && uf.User1 == users.Gd
)
select new { users.Gd, users.Firstname, users.Lastname, users.Username, users.Email };
return listOfFollowers;
}

用户型号:

public class User
{
[Key]
public Guid Gd { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public byte[] PasswordHash { get; set; }
public byte[] PasswordSalt { get; set; }
}

使用列表时出错<用户>:

无法隐式转换类型"System.Linq.IQueryable<<anonymous 类型:系统.Guid Gd,字符串名字,字符串姓氏,字符串 用户名,字符串电子邮件>>' 到 'System.Collections.Generic.List'. 存在显式转换(您是否缺少强制转换?

使用 IEnumerable 时出错<用户>:

无法隐式转换类型"System.Linq.IQueryable<<anonymous 类型:系统.Guid Gd,字符串名字,字符串姓氏,字符串 用户名,字符串电子邮件>>' 到 'System.Collections.Generic.IEnumerable'. 存在显式转换(您是否缺少强制转换?

帮助将不胜感激!

当前代码的返回值在错误消息中:

IQueryable<<anonymous type: System.Guid Gd, string Firstname, string Lastname, string Username, string Email>>

更改此行

select new { users.Gd, users.Firstname, users.Lastname, users.Username, users.Email };

有了这个

select new User() { Gd = users.Gd, Firstname = users.Firstname, Lastname = users.Lasname, Username = users.Username };

然后你可以用IEnumerable<User>来更改dynamic

如果要将返回类型更改为List<User>,请按照注释中@juharr所述添加ToList()

另一种选择是创建一个仅包含要公开的属性的新类。 例如

public class UserDto
{
public Guid Gd { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Username { get; set; }
public string Email { get; set; }
}

然后在查询中使用它

select new UserDto
{
Gd = users.Gd,
Firstname = users.Firstname,
Lastname = users.Lastname,
Username = users.Username,
Email = users.Email
};

并使用.AsEnumerable().ToList()获取返回类型IEnumerable<UserDto>List<UserDto>

return listOfFollowers.ToList(); // or .AsEnumerable()

相关内容

最新更新