找不到 linq 查询输出的正确返回类型
Posted
技术标签:
【中文标题】找不到 linq 查询输出的正确返回类型【英文标题】:Can't find the right return type for a linq query output 【发布时间】:2021-04-13 14:50:59 【问题描述】:我有以下方法可以返回 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>' 到 'System.Collections.Generic.List
'。 存在显式转换(您是否缺少演员表?)
使用 IEnumerable
不能隐式转换类型'System.Linq.IQueryable>' 到 'System.Collections.Generic.IEnumerable
'。 存在显式转换(您是否缺少演员表?)
我们将不胜感激!
【问题讨论】:
【参考方案1】:当前代码的返回值在错误信息中:
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 ;
然后您可以将dynamic
更改为IEnumerable<User>
。
如果要将返回类型更改为List<User>
,请添加ToList()
,正如@juharr 在cmets 中所说。
【讨论】:
他们必须执行ToList
才能使用List<User>
返回类型。
@juharr 对,感谢您指出这一点,将编辑答案:)
哇没想到!感谢您的帮助,我很感激!
很高兴能提供帮助:)【参考方案2】:
另一种选择是创建一个仅包含您要公开的属性的新类。 例如
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()
【讨论】:
没错!完全忘记了重要的 DTO。感谢您的帮助,我会将其添加到我的代码中。以上是关于找不到 linq 查询输出的正确返回类型的主要内容,如果未能解决你的问题,请参考以下文章
如果linq查询找不到匹配的记录,则对象引用未设置错误? [重复]
并且找不到可接受类型为“System.Linq.IQueryable<MvcApplication1.Models.Student>”