[英]How to query based on an previous object result? Entity Framework
我非常堅持從數據庫中獲取正確的信息。 所以,基本上問題是我需要在我的語句中添加 where 閉包來驗證它只檢索真實和需要的信息。
public async Task<IEnumerable<Post>> GetAllPosts(int userId, int pageNumber)
{
var followersIds = _dataContext.Followees.Where(f => f.CaUserId == userId).AsQueryable();
pageNumber *= 15;
var posts = await _dataContext.Posts
.Include(p => p.CaUser)
.Include(p => p.CaUser.Photos)
.Include(c => c.Comments)
.Where(u => u.CaUserId == followersIds.Id) <=== ERROR
.Include(l => l.LikeDet).ToListAsync();
return posts.OrderByDescending(p => p.Created).Take(pageNumber);
}
如您所見,followersIds 包含我需要在 post 變量中驗證的所有必需 ID。 但是我嘗試過使用 foreach 但似乎沒有任何效果。 有人可以幫我解決這個問題嗎?
簡短的版本是您可以將上面標記的錯誤行更改為類似.Where(u => followersIds.Contains(u.CaUserId)
的內容,這將返回所有具有包含在 followerIds 變量中的 CaUserID 的實體,但是這仍然有可能返回比您實際需要的更大的數據集並且是一個相當大的查詢。(您可能還需要檢查一下語法,從 memory 拍攝,沒有打開 IDE)上面那個查詢中的實體,所以也許你最好使用 Select 查詢而不是 Where 查詢,它只會從每個實體加載你需要的屬性。
看看Jon Smith 的這篇文章,他寫了“Entity Framework Core In Action”一書,他在其中談到了使用 Select 查詢和 DTO 來只得到你需要的東西。 很有可能,您不需要在上面的查詢中要求的每個實體的每個屬性。 (也許你知道,我知道什么:p)使用它可能會幫助你為你需要的數據集獲得更有效的東西。 查詢中的代碼行更多,但后端性能可能更好,並且 memory 占用空間更輕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.