返回ApplicationUser对象或ApplicationUserId字符串的列表

博观而约取,厚积而薄发。这篇文章主要讲述返回ApplicationUser对象或ApplicationUserId字符串的列表相关的知识,希望能为你提供帮助。
我的ASP.NET核心项目中有一个Twitter风格的粉丝/后续设置。
我正在尝试构建一个LINQ查询,它将返回属于我的记录以及我所关注的用户网络。像这样的东西:

.Where(o => usersFollowingList.Contains(o.ApplicationUser.Id))

我的粉丝/后续设置是与.NET Core的IdentityUser的自引用关系:
public class ApplicationUser : IdentityUser { public virtual ICollection< Network> Following { get; set; } public virtual ICollection< Network> Followers { get; set; } }public class Network { public ApplicationUser ApplicationUser { get; set; } public string ApplicationUserId { get; set; } public ApplicationUser Follower { get; set; } public string FollowerId { get; set; } }

此设置为我提供了我所关注的用户列表。该集合具有ApplicationUser对象及其ApplicationUserId,它是字符串类型。
我试图获取我可以在上面的WHERE子句中使用的ApplicationUser对象或ApplicationUserId字符串的集合遇到问题。
【返回ApplicationUser对象或ApplicationUserId字符串的列表】我可以得到一个我的粉丝的ApplicationUserId字符串列表,如下所示:
var g = from p in loggedinUser.Following select p.ApplicationUser.Id.ToString();

但是这不包含我自己的ApplicationUserId。我无法轻松地将自己的ApplicationUserId添加到此集合中,因为它是IEnumerable类型。
如何获取可以在WHERE子句中使用的ApplicationUser对象或ApplicationUserId字符串的适当集合?或者有没有更好的方法来使用我的WHERE过滤器中的追随者列表?
答案你可以使用Concat添加两个IEnumerable,所以你只需要将自己转换为单身IEnumerable。我更喜欢扩展方法:
public static IEnumerable< T> Append< T> (this IEnumerable< T> rest, params T[] last) => rest.Concat(last);

现在您可以查询为:
var g = (from p in loggedinUser.Following select p.ApplicationUser.Id.ToString()) .Append(loggedinUser.Id.ToString());

但如果你已经拥有g Where物体,为什么在Following使用Network
var g = loggedinUser.Following .Append(loggedinUser);

当然,你也可以做Where,但这是不必要的搜索:
.Where(o => usersFollowingList.Contains(o.ApplicationUser.Id) || o.ApplicationUser.Id == loggedinUser.Id)


    推荐阅读