我需要将此查询转换为 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 关注
- 161 浏览
添加回答
举报
0/150
提交
取消