C# 对同一对象使用不同ID查询数据库中的项
因此,我试图获取所有的“用户照片”,其中他们的“用户ID”==“FollowerId”,当存在多个“FollowerId”时,我会遇到一个问题,我需要知道如何使其适用于“FollowerId”列表,以便用户可以取回他们跟踪的所有“用户”的“用户照片”C# 对同一对象使用不同ID查询数据库中的项,c#,asp.net,.net,asp.net-core,C#,Asp.net,.net,Asp.net Core,因此,我试图获取所有的“用户照片”,其中他们的“用户ID”==“FollowerId”,当存在多个“FollowerId”时,我会遇到一个问题,我需要知道如何使其适用于“FollowerId”列表,以便用户可以取回他们跟踪的所有“用户”的“用户照片” [HttpGet("u/{username}")] public async Task<IQueryable> GetSpecificFeed(string username) { var use
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
// Follower is the user that is being followed
// Following is the user that is doing the following (so the current logged in user)
var userId = user.Id;
// This bit works and returns the correct userId
var followerIds = _context.Follows.Where(x => x.FollowerId == userId);
// This should return all of the 'FollowerIds' that the current user is following
// This however doesn't do that, it just throws this error:
// SQLite Error 1: 'no such column: x.UserId' (I don't know why)
var feed = _context.UserPhotos.Where(x => x.UserId == userId);
// This currently returns all of the 'UserPhotos' if their 'UserId' is equal to the 'UserId'
// (which is the id of the user that is logged in) -> This isn't what I want it to do
// Once the 'followerIds' return the correct thing, it should then get the userPhotos where
// The UserId == followerIds (followerIds will be an array, so it will have to check through
// multiple values to get the whole 'feed'
return feed;
}
用户类(我删除了与本例不相关的属性)
这段代码显示了它应该如何工作,但它没有(这显示了我试图实现的目标)
[HttpGet(“u/{username}”)]
公共异步任务GetSpecificFeed(字符串用户名)
{
var user=\u context.Users.FirstOrDefault(x=>x.Username==Username);
//Follower是被跟踪的用户
//以下是正在执行以下操作的用户(因此是当前登录的用户)
var userId=user.Id;
var photos=_context.UserPhotos;
var followerIds=_context.followerd.Where(x=>x.followerIds==userId);
//获取当前用户所在用户的所有用户ID
//跟踪并将其放入“followerIds”
var feed=photos.Where(x=>x.UserId==followerIds);
//在“照片”中搜索“用户id”(用户的id)
//“已创建”匹配“followersIds”
回馈;
}
您应该首先启动sql查询。在您的案例中,可以使用ToList()实现此目的
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains( x.UserId ));
return feeds;
}
[HttpGet(“u/{username}”)]
公共异步任务GetSpecificFeed(字符串用户名)
{
var user=\u context.Users.FirstOrDefault(x=>x.Username==Username);
var userId=user.Id;
var followerIds=_context.followerd.Where(x=>x.followerIds==userId.ToList();
var feeds=_context.UserPhotos.Where(x=>followerIds.Contains(x.UserId));
回馈;
}
您应该首先启动sql查询。在您的案例中,可以使用ToList()实现此目的
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains( x.UserId ));
return feeds;
}
[HttpGet(“u/{username}”)]
公共异步任务GetSpecificFeed(字符串用户名)
{
var user=\u context.Users.FirstOrDefault(x=>x.Username==Username);
var userId=user.Id;
var followerIds=_context.followerd.Where(x=>x.followerIds==userId.ToList();
var feeds=_context.UserPhotos.Where(x=>followerIds.Contains(x.UserId));
回馈;
}
您可以参考以下代码:
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var photos = _context.UserPhotos;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).Select(x => x.FollowingId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains(x.UserId));
return feeds;
}
[HttpGet(“u/{username}”)]
公共异步任务GetSpecificFeed(字符串用户名)
{
var user=\u context.Users.FirstOrDefault(x=>x.Username==Username);
var userId=user.Id;
var photos=_context.UserPhotos;
var followerIds=_context.followerd.Where(x=>x.followeridid==userId)。选择(x=>x.followerIds.ToList();
var feeds=_context.UserPhotos.Where(x=>followerIds.Contains(x.UserId));
回馈;
}
您可以参考以下代码:
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var photos = _context.UserPhotos;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).Select(x => x.FollowingId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains(x.UserId));
return feeds;
}
[HttpGet(“u/{username}”)]
公共异步任务GetSpecificFeed(字符串用户名)
{
var user=\u context.Users.FirstOrDefault(x=>x.Username==Username);
var userId=user.Id;
var photos=_context.UserPhotos;
var followerIds=_context.followerd.Where(x=>x.followeridid==userId)。选择(x=>x.followerIds.ToList();
var feeds=_context.UserPhotos.Where(x=>followerIds.Contains(x.UserId));
回馈;
}
例外情况“无此类列”与型号声明有关。尝试调查Follow类并确定其关系。我已经这样做了,并且添加了它们之间的关系,但看不出我做错了什么,我编辑了问题“无此类列”的例外与模型声明相关。试着调查下面的课程并确定它的关系。我已经这样做了,我已经添加了它们之间的关系,但看不出我做错了什么,我编辑了问题。这很好,谢谢,不过我有一个问题。你把“包含”放进去,不是吗;这意味着它可能返回错误的结果,例如,如果followersid包含“1”,它是否会混淆并返回错误的结果,因为followerrid包含“1”,因此它可能返回followerrid为“10”的结果(或其中包含1的任何数字)aswell@chumberjosh,你根本不需要担心。下面的代码返回由不同ID组成的列表集合。此处包含用于判断当前x.UserId是否等于以下数据集合之一。它用作int
数据来判断它们是否相等。不用确定字符串中是否包含字符。这非常感谢,不过我有一个问题。你把“包含”放进去,不是吗;这意味着它可能返回错误的结果,例如,如果followersid包含“1”,它是否会混淆并返回错误的结果,因为followerrid包含“1”,因此它可能返回followerrid为“10”的结果(或其中包含1的任何数字)aswell@chumberjosh,你根本不需要担心。下面的代码返回由不同ID组成的列表集合。此处包含用于判断当前x.UserId是否等于以下数据集合之一。它用作int
数据来判断它们是否相等。而不是确定字符串中是否包含字符。
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains( x.UserId ));
return feeds;
}
[HttpGet("u/{username}")]
public async Task<IQueryable> GetSpecificFeed(string username)
{
var user = _context.Users.FirstOrDefault(x => x.Username == username);
var userId = user.Id;
var photos = _context.UserPhotos;
var followerIds = _context.Follows.Where(x => x.FollowerId == userId).Select(x => x.FollowingId).ToList();
var feeds = _context.UserPhotos.Where(x => followerIds.Contains(x.UserId));
return feeds;
}