NHibernate 3.2 Linq 与相关子查询

2024-01-15

任何人都可以帮助尝试在 Linq to NHibernate 3.2 中执行以下 SQL 吗?

select act.Name from Activity act
where 1 = 
(
  select top 1 p.Allow
  from Permissions p inner join Operations o on p.OperationId = o.OperationId
  inner join Users u on p.UserId = u.UserId
  where p.EntitySecurityKey = act.ActivityId and o.Name = '/operation'
  and u.Name = 'user'
  order by p.Level desc, p.Allow asc
)

这在 SQL 中工作得很好,但我就是无法理解如何使用 Linq 来完成相同的操作。


这里不需要相关子查询。您的外部查询所做的只是获取EntitySecurityKey.Name when Allow == true。您可以使用简单的方法来执行该逻辑if查询后的声明。

private string GetEntitySecurityKeyNameIfAllowed(ISession session, string operationName, string userName)
{
    var result = session.Query<Permission>()
        .Where(p => p.Operation.Name == operationName
            && p.User.Name == userName)
        .OrderByDescending(p => p.Level)
        .ThenBy(p => p.Allow)
        .Select(p => new
        {
            p.Allow,
            p.EntitySecurityKey.Name
        })
        .FirstOrDefault();

    return result != null && result.Allow
        ? result.Name
        : null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate 3.2 Linq 与相关子查询 的相关文章

  • 流畅的 Nhibernate AutoMapping 继承和忽略抽象属性

    我有一个已成功映射的继承结构 产品 基础 PdfProduct 继承自Product 和OtherProduct 继承自Product 这些工作正常 我之前用 hbm xml 文件做过类似的事情 在上一个项目中 当我试图找出产品是什么类型时
  • “Equals”和“SequenceEqual”之间的区别?

    是否存在以下情况 Equals MyList1 MyList2 MyList1 SequenceEqual MyList2 两者之间有什么区别 Equals obj1 obj2 and obj1 Equals obj2 Thanks Equ
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 按不同日期拆分列表

    希望还有一个简单的 假设我有一个这样的集合 List
  • 在 Select 语句中调用表达式 - LINQ to Entity Framework

    我正在尝试使用我在尝试执行 select 子句时创建的现有表达式构建类 但我不确定如何将表达式附加到 Select 的表达式树 我尝试执行以下操作 var catalogs matchingCatalogs Select c gt new
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 如何从使用 exec() 的存储过程创建复杂类型?

    我想通过动态构造并执行的查询创建一个复杂类型 以便在实体管理器中使用exec 是否可以 既然我正在写一个过滤器 如果不可能的话你会做什么 另外 我正在使用 linq 进行评估 但过滤器需要许多表及其寄存器 因此效率是一个问题 谢谢 是的 您
  • 如何在 NHibernate 中使用 READPAST 提示?

    有什么办法可以让 NHibernate 使用吗the READPAST hint https learn microsoft com en us sql t sql queries hints transact sql table从 SQL
  • 无法将类型 System.Linq.IQueryable 隐式转换为字符串

    我有两个名为 Rank 和 CrewMembers 的表 我想根据 CrewMember 的 id 获取 Rank 表中存在的排名名称 我已将船员 ID 作为参数传递 并在此基础上该方法将返回该特定船员的等级 这就是我的代码 public
  • 使用表达式树构造 LINQ GroupBy 查询

    我已经在这个问题上坚持了一个星期了 但没有找到解决方案 我有一个像下面这样的 POCO public class Journal public int Id get set public string AuthorName get set
  • 展平可能包含数组的对象数组

    我有一个IEnumerable其中可能包含也可能不包含一些嵌套集合 例如 我的出发点可能是这样的 foo 2 1 2 3 4 bar 我想将其压平为 foo 2 1 2 3 4 bar 我在想一个SelectMany应该在这里工作 但无法找
  • NHibernate:如何从会话缓存中获取实体实例?

    我在工作单元开始时开始会话 并在工作单元结束时关闭 工作单元分布在多种方法中 在一种方法中 我使用加载实体Get方法 所以它位于会话缓存中 实体实例对于方法来说是本地的 因此 当方法范围结束时 实体实例将无法访问 但实体仍在会话缓存中 现在
  • 如何在 VS 2013 的立即窗口中执行 LINQ 和/或 foreach?

    在调试过程中探测当前状态时 立即窗口是非常有用的工具 我了解到 通过使用问号 人们可以在那里做更多的事情 如图所示在这篇文章中 https stackoverflow com questions 32934635 execute metho
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • 使用 LINQ 迭代类属性

    有一个 ParsedTemplate 类 它有超过 300 个属性 类型为 Details 和 BlockDetails parsedTemplate 对象将由函数填充 填充这个对象后 我需要一个 LINQ 或其他方式 来查找是否有任何属性
  • nHibernate 使用 Log4Net 进行日志记录,线程会话问题

    大家好 这里有一个小问题 我正在努力解决这个问题 我目前正在开始使用 nHibernate 由于工作需要 我不得不这样做 并且我在 nHibernate 的会话和多线程方面遇到了一些困难 我想在这里完成的任务是让 Log4Net 将所有内容
  • 如何在嵌套列表视图中编辑数据

    我使用列表视图来显示项目列表 并使用嵌套列表视图来显示每个项目的功能列表 父列表视图和子列表视图都需要能够进行插入 编辑和删除操作 它适用于父列表视图 但是 当我尝试编辑子项目时 编辑按钮不会将其带入编辑模式 您能建议我代码中缺少什么吗

随机推荐