SQL IN 运算符到 LINQ

我需要将此查询转换为 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.Id

WHERE

  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);

我用这个得到零结果。


小怪兽爱吃肉
浏览 129回答 3
3回答

杨__羊羊

我建议您创建两个 Id 列表,分别代表可以包含的活动和需要排除的活动。像下面这样使用它们:List<int>&nbsp;IncludedIds&nbsp;=&nbsp;new&nbsp;List<int>(){1,26}; List<int>&nbsp;ExcludedIds&nbsp;=&nbsp;new&nbsp;List<int>(){27}; _dbContext.ProfileFans.Where(e&nbsp;=>&nbsp;e.Fan.SNUrl&nbsp;!=&nbsp;null&nbsp;&&&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Activities.Any(x&nbsp;=>&nbsp;IncludedIds.Any(x.ActivityId)&nbsp;&&&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!ExcludedIds.Any(x.ActivityId)&nbsp;&&&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.ProfileId&nbsp;==&nbsp;profileId);请注意:我使用的List<int>是因为给定的示例,您必须根据数据类型创建列表ActivityId

森林海

您不需要白名单和黑名单。要么是其中之一,要么是另一个。所以我正在制定一个白名单。如果允许的ActivityId是1或者26,那么根据定义它肯定不是27,所以没有必要尝试排除它。我正在使用int[]而不是List<int>考虑到白名单可能是静态的,但List<int>如果您想动态修改它,请随意将其更改为 a 。int[]&nbsp;whiteList&nbsp;=&nbsp;{&nbsp;1,&nbsp;26&nbsp;}; var&nbsp;allFansSavedAsLeads&nbsp;=&nbsp;_dbContext.ProfileFans.Where(pf&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;pf.Fan.SNUrl.HasValue&nbsp;&& &nbsp;&nbsp;&nbsp;&nbsp;pf.Activities.Any(fa&nbsp;=>&nbsp;whiteList.Contains(fa.ActivityId)));如果您也想要 JOIN,您可能需要查看.Include(),但从您最初的 SQL 查询来看,您似乎实际上并不需要连接表的内容。

狐的传说

您可以创建一个临时ActivityListASvar List<int> ActivityList = new List<int>() {1, 26}并使用类似的东西ActivityList.Contains(x => x.ActivityId)
打开App,查看更多内容
随时随地看视频慕课网APP