【问题标题】:creating in query in nhibernate using linq使用 linq 在 nhibernate 中创建查询
【发布时间】:2025-12-30 17:20:09
【问题描述】:

我想创建类似的东西

SELECT * FROM dbo.localconveyance_details WHERE voucherNo IN (SELECT voucherNo FROM dbo.localconveyance_master WHERE emp_code = '48'

在流畅的 nhibernate 中使用 linq

试过这样的

IList<LocalConveyanceDetails> detailslist = session.Query<LocalConveyanceDetails>()
                    .Where(x => x.LocalConveyanceMaster.emp_code == e_id).ToList();

但它不起作用......有人能说出实际的查询是什么吗?

更新:

我使用的实体是:

 public class LocalConveyanceMaster
{
    public virtual String voucherNo { get; set; }
    public virtual DateTime voucher_date { get; set; }
    public virtual String emp_code { get; set; }
    public virtual String emp_name { get; set; }
    public virtual String project_id { get; set; }
    public virtual DateTime submitDate { get; set; }
    public virtual String to_be_approved_by { get; set; }
    public virtual String created_by { get; set; }
    public virtual Decimal conveyance_total { get; set; }
    public virtual Decimal approved_amount { get; set; }
    public virtual String approved { get; set; }

    public virtual ProjectMaster Project { get; set; }
    public virtual ICollection<LocalConveyanceDetails> LocalConveyanceDetails { get; set; }
}
public class LocalConveyanceDetails
{
    public virtual String LcDetailsId { get; set; }
    public virtual String voucherNo { get; set; }
    public virtual String serialNo { get; set; }
    public virtual String From_Project_Id { get; set; }
    public virtual String To_Project_Id { get; set; }
    public virtual DateTime particularsDate { get; set; }
    public virtual Decimal particularsAmount { get; set; }
    public virtual String particulars { get; set; }

    public virtual LocalConveyanceMaster LocalConveyanceMaster { get; set; }
}

映射是:

 public LocalConveyanceMap()
    {
        Table("localconveyance_master");
        Id(x => x.voucherNo).Column("voucherNo");
        Map(x => x.voucher_date);
        Map(x => x.emp_code);
        Map(x => x.emp_name);
        Map(x => x.project_id);
        Map(x => x.submitDate);
        Map(x => x.to_be_approved_by);
        Map(x => x.created_by);
        Map(x => x.conveyance_total);
        Map(x => x.approved_amount);
        Map(x => x.approved);

        References(x => x.Project)
            .Column("project_id")
            .ForeignKey("project_id");

        HasMany(x => x.LocalConveyanceDetails)
            .KeyColumn("voucherno").AsSet();

    }
 public LocalConveyanceDetailsMap()
    {
        Table("Localconveyance_details");
        Id(x => x.LcDetailsId).Column("LcDetailsId");
        Map(x => x.voucherNo);
        Map(x => x.serialNo);
        Map(x => x.From_Project_Id);
        Map(x => x.To_Project_Id);
        Map(x => x.particularsDate);
        Map(x => x.particularsAmount);
        Map(x => x.particulars);


        References(x => x.LocalConveyanceMaster)
            .PropertyRef(x => x.voucherNo).Column("voucherno")
            .ForeignKey("voucherno");

    }

我得到的错误是:

异常:{“执行 LoadByUniqueKey 时出错[SQL:SQL 不可用]”}

InnerException : {"字典中没有给定的键。"}

【问题讨论】:

  • 你能具体说明什么是不工作的吗?你得到一个错误,还是生成的 sql 错误?你能详细说明这些实体及其映射吗?
  • @sJhonny 更新了我的代码
  • 好吧,我看不出您的代码有任何直接问题。唯一的是LocalConveyanceMaster和LocalConveyanceDetails之间的关系,我认为应该标记为'Inverse'。但我不确定这与你的问题有关。你试过用谷歌搜索这些异常吗?
  • @sJhonny 基本上我想要的是首先加载所有 localconveyance_details,其中 emp_code = say 是 '48',然后它会从主表中过滤所有 localconvyance .... 它会在哪里寻找我在查询 emp_code = '48' 时得到的 ids 这就是我的基本想法……不知道是什么原因造成的……我尝试谷歌搜索,但找不到任何相关信息

标签: nhibernate fluent-nhibernate


【解决方案1】:

当类的一个或多个成员属于其他类 [关系] 时,就会发生这种情况。 我有同样的问题,我删除了该成员并以这种形式为每个成员添加新成员:

公共虚拟整数? [相关类]id {get;set;}

示例:

公共虚拟整数? PersonId {get;set;}

【讨论】: