为了账号安全,请及时绑定邮箱和手机立即绑定

SQL IN 运算符到 LINQ

SQL IN 运算符到 LINQ

C#
小怪兽爱吃肉 2023-07-23 14:23:43
我需要将此查询转换为 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


查看完整回答
反对 回复 2023-07-23
?
森林海

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 查询来看,您似乎实际上并不需要连接表的内容。


查看完整回答
反对 回复 2023-07-23
?
狐的传说

TA贡献1804条经验 获得超3个赞

您可以创建一个临时ActivityListAS

var List<int> ActivityList = new List<int>() {1, 26}

并使用类似的东西

ActivityList.Contains(x => x.ActivityId)
查看完整回答
反对 回复 2023-07-23
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信