簡體   English   中英

在where子句中加入LINQ

[英]Join in LINQ within a where clause

我有一個數據庫結構,其中包含一組用戶及其UserId

然后,我有一個名為“ Post”的表,該表由一個文本字段和一個CreatedBy字段組成。

然后,我有一個“關注”表,其中包含“ WhoIsFollowing”和“ WhoWhenFollow”字段。

這個想法是“關注”表映射了另一個用戶“關注”的用戶。

如果我以特定用戶的身份使用該應用程序,並且希望獲得所有相關的“帖子”,則這些將是我關注的那些用戶的帖子或我自己的帖子。

我一直試圖將其納入一條LINQ語句,但未能使其完美。 最終,我需要在“帖子”表中查詢我已發布的所有“帖子”,以及我在“關注者”表中關注的人員的所有帖子。

我已經處理了這個聲明

 postsWeWant = (from s in db.Posts
                join sa in db.Follows on s.CreatedBy equals sa.WhoTheyAreFollowing into joinTable1
                from x in joinTable1.DefaultIfEmpty()
                where (x.WhoIsFollowing == userId || s.CreatedBy == userId) && !s.Deleted
                orderby s.DateCreated descending
                select s).Take(25).ToList();

問題是它似乎返回了由用戶自己發布的所有帖子的副本。 我已經添加了.Distinct()來解決此問題,但並不是每次都獲取25條帖子,重復項意味着當該用戶在最近25條帖子中有很多帖子時,其返回的內容要少得多。

首先,為什么以上內容會重復出現? (這將有助於我進一步了解該聲明),其次我該如何解決?

沒有數據結構很難說清楚,但是我建議您調查一下,或者擴大您的聯接以消除重復的關聯。

如果失敗了,那么我將使用group by子句來刪除重復項,因此不需要區分。 您最終獲得少於25條記錄的原因可能是因為消除重復項是在花費25條之后。但是我想我肯定需要更多的代碼來說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM