Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在NHibernate中创建表示一个或两个之间存在的条件?_C#_Nhibernate - Fatal编程技术网

C# 如何在NHibernate中创建表示一个或两个之间存在的条件?

C# 如何在NHibernate中创建表示一个或两个之间存在的条件?,c#,nhibernate,C#,Nhibernate,这个问题让我头疼(这很容易,因为我是一个NHibernate新手):我如何通过CriteriaAPI表示以下查询(T-SQL) DECLARE @pcode VARCHAR(8) SET @pcode = 'somecode' SELECT d.* FROM document d WHERE EXISTS ( SELECT 1 FROM project p WHERE p.id = d.projectId AND p.code =

这个问题让我头疼(这很容易,因为我是一个NHibernate新手):我如何通过CriteriaAPI表示以下查询(T-SQL)

DECLARE @pcode VARCHAR(8)
SET @pcode = 'somecode'

SELECT d.*
FROM document d
WHERE EXISTS (
          SELECT 1 
          FROM project p 
          WHERE p.id = d.projectId AND p.code = @pcode)
      OR EXISTS (
          SELECT 1 
          FROM job j INNER JOIN project p ON p.id = j.projectId
          WHERE j.id = d.jobId AND p.code = @pcode)
(文档有两种可能的关联,项目或作业。在给定时间只有一种关联具有值;另一种关联具有
null

目标是加载与给定项目直接关联或通过作业间接关联的所有文档


谢谢。

我相信这可以解决问题:

DetachedCriteria dCriteria1 = DetachedCriteria.For<Project>("project")
        .SetProjection(Projections.Property("project.Id"))
        .Add(Restrictions.EqProperty("doc.projectId", "project.Id"));

DetachedCriteria dCriteria2 = DetachedCriteria.For<Job>("job")
           .SetProjection(Projections.Property("job.Id"))   
           .CreateCriteria("Projects", "p")
           .Add(Restrictions.EqProperty("doc.jobId", "job.Id"))
           .Add(Restrictions.Eq("p.code", "somecode"));

var documents = NHibernateSessionManager.Session.CreateCriteria<Document>("doc")
        .Add(Restrictions.Or(
            Subqueries.Exists(dCriteria1),
            Subqueries.Exists(dCriteria2))).List<Document>();
detachedCriteria1=DetachedCriteria.For(“项目”)
.SetProjection(Projections.Property(“project.Id”))
.Add(Restrictions.EqProperty(“doc.projectId”、“project.Id”));
DetachedCriteria2=DetachedCriteria.For(“作业”)
.SetProjection(Projections.Property(“job.Id”))
.CreateCriteria(“项目”、“p”)
.Add(限制.EqProperty(“doc.jobId”、“job.Id”))
.Add(Restrictions.Eq(“p.code”、“somecode”));
var documents=NHibernateSessionManager.Session.CreateCriteria(“doc”)
.添加(限制)或(
存在子查询(dCriteria1),
subquerys.Exists(dCriteria2)).List();

上面的代码来自您提供的示例查询。如果它不完全准确,您可以稍加修改,使其在您的解决方案中可行。

只需更改一些名称(以反映我的实体),就可以很好地发挥作用。非常感谢。