我的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字符串的集合。
我可以像这样得到我的粉丝的ApplicationUserId字符串列表:
var g = from p in loggedinUser.Following
select p.ApplicationUser.Id.ToString();
但是这不包含我自己的ApplicationUserId。我无法轻松地将自己的ApplicationUserId添加到此集合中,因为它是IEnumerable类型。
如何获取可在我的WHERE子句中使用的ApplicationUser对象或ApplicationUserId字符串的适当集合?或者是否有更好的方法在我的WHERE过滤器中使用“关注者”列表?
答案 0 :(得分:1)
您可以使用library(shiny)
library(data.table)
library(DT)
tabledata <- data.table(a=1:4, b= 5:8)
ui <- fluidPage(
DT::dataTableOutput("currenttable")
)
server <- function(input,output, session){
output$currenttable <- renderDT({tabledata},
rownames = FALSE,
extensions = 'Buttons',
options = list(dom = 'Bfrtip',
pageLength = nrow(tabledata),
buttons = list(
list(extend = 'copy'),
list(extend = 'pdf',
filename = 'CurrentTable',
title = "My Title",
header = FALSE)
)
)
)
}
shinyApp(ui, server)
添加两个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