繁体   English   中英

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

[英]Can't find the right return type for a linq query output

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

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;
}

用户 model:

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.Guid Gd、字符串名字、字符串姓氏、字符串用户名、字符串电子邮件>>”隐式转换为“System.Collections.Generic.List<Cosialities.Authorization。用户>'。 存在显式转换(您是否缺少演员表?)

使用 IEnumerable<用户> 时出错:

无法将类型“System.Linq.IQueryable<<匿名类型:System.Guid Gd、字符串名字、字符串姓氏、字符串用户名、字符串电子邮件>>”隐式转换为“System.Collections.Generic.IEnumerable<CosialAPI.Author.用户>'。 存在显式转换(您是否缺少演员表?)

帮助将不胜感激!

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

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> ,请添加一个ToList()正如@juharr 在评论中所说的那样。

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM