简体   繁体   English

SQL不在Linq中

[英]SQL not in to Linq

I have a (Oracle)SQL query that I want to translate to Linq to use on a NHibernate context. 我有一个(Oracle)SQL查询,我想转换为Linq以在NHibernate上下文中使用。 What the query does is to get me all the Functions that has been deleted from a given Module (ie. they don't exist in the given module but are linked to a predecessor Module ) 该查询所做的是让我了解已从给定模块中删除的所有功能 (即,它们在给定module不存在,但已链接到前一个模块

"SELECT * FROM Function WHERE ModID = " + module.PredecessorID + "
   AND FncName NOT IN
      (SELECT FncName FROM Function WHERE ModId = " + module.ModID + " )"

Here is a image to explain the data model 这是一张解释数据模型的图像

在此处输入图片说明

I'm looking for an expression with the "dot notation", something like this: 我正在寻找带有“点符号”的表达式,如下所示:

DBContext.GetAll<Function>()
    .Where(x => x.Module.ModID == module.PredecessorID)...

You could do this in two steps (for readability). 您可以分两个步骤进行操作(以提高可读性)。

var excludedNames = DbContext.GetAll<Function>()
                             .Where(x => x.ModeID == module.ModID)
                             .Select(x => x.FncName);

var result = DBContext.GetAll<Function>()
                      .Where(x => x.Module.ModID == module.PredecessorID &&
                                  !excludedNames.Contains(x.FncName));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM