我需要將此查詢轉換為 Linq 查詢SELECT DISTINCT (pf.Id)FROM PF pf LEFT JOIN FA fa on pf.id = fa.PFId LEFT JOIN Fan f ON pf.FId = f.IdWHERE pf.PId=2 AND fa.AId IN (1,26) AND fa.AId NOT IN(27)這是我到目前為止所要求的 LINQ 查詢var allFansSavedAsLeads = _dbContext.PF .Where(e => e.F.S != null && e.A.Any(x => x.AId==27 && x.AId.Equals(1) /*&& x.AId != 27*/) && e.PId == pId);我用這個得到零結果。
3 回答

楊__羊羊
TA貢獻1943條經驗 獲得超7個贊
我建議您創建兩個 Id 列表,分別代表可以包含的活動和需要排除的活動。像下面這樣使用它們:
List<int> IncludedIds = new List<int>(){1,26}; List<int> ExcludedIds = new List<int>(){27}; _dbContext.ProfileFans.Where(e => e.Fan.SNUrl != null && e.Activities.Any(x => IncludedIds.Any(x.ActivityId) && !ExcludedIds.Any(x.ActivityId) && e.ProfileId == profileId);
請注意:我使用的List<int>
是因為給定的示例,您必須根據數據類型創建列表ActivityId

森林海
TA貢獻2011條經驗 獲得超2個贊
您不需要白名單和黑名單。要么是其中之一,要么是另一個。所以我正在制定一個白名單。如果允許的ActivityId是1或者26,那么根據定義它肯定不是27,所以沒有必要嘗試排除它。我正在使用int[]
而不是List<int>
考慮到白名單可能是靜態的,但List<int>
如果您想動態修改它,請隨意將其更改為 a 。
int[] whiteList = { 1, 26 }; var allFansSavedAsLeads = _dbContext.ProfileFans.Where(pf => pf.Fan.SNUrl.HasValue && pf.Activities.Any(fa => whiteList.Contains(fa.ActivityId)));
如果您也想要 JOIN,您可能需要查看.Include()
,但從您最初的 SQL 查詢來看,您似乎實際上并不需要連接表的內容。

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
您可以創建一個臨時ActivityList
AS
var?List<int>?ActivityList?=?new?List<int>()?{1,?26}
并使用類似的東西
ActivityList.Contains(x?=>?x.ActivityId)
- 3 回答
- 0 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消