2015-07-09 27 views
0

在NHibernate中进行查询时,我总是收到异常。在NHibernate中执行内部联接

这是下面的查询:

//Query tblSentEmails to pull out all of the records according to that lngMergeID 
       strQuery = 
        "SELECT strEmailAddress, tblSentEmails.strSubject FROM tblSentEmails INNER JOIN tblRecipients ON tblSentEmails.strEmailSendID=tblRecipients.strEmailSendID WHERE tblSentEmails.lngMergeID ='" + 
        lngMergeID + "' ORDER BY strEmailAddress ASC"; 

这是执行它的线。

IQuery qryGetMergedEmails = _session.CreateSQLQuery(strQuery); 

在此之后,我不断收到一个异常,指出存在识别错误​​。

这是原始查询:

SELECT strEmailAddress, tblSentEmails.strSubject 
FROM tblSentEmails INNER JOIN tblRecipients 
ON tblSentEmails.strEmailSendID=tblRecipients.strEmailSendID 
WHERE tblSentEmails.lngMergeID='11099' 
ORDER BY strEmailAddress ASC 

注意ln​​gMergeID =“11099”只是在这个例子中,我在通过参数传递。

我是否正确运行此查询?

编辑:这是我的映射:

public tblSentEmailsMap() 
    { 
     //Id(x => x.lngEmailID); 
     Id(x => x.strEmailSendID).Not.Nullable(); 
     Map(x => x.dtmSent).Nullable(); 
     Map(x => x.strSubject).Nullable(); 
     Map(x => x.strBody).Nullable(); 
     Map(x => x.strConversationID).Nullable(); 
     Map(x => x.strConversationTopic).Nullable(); 
     Map(x => x.strConversationIndex).Nullable(); 
     Map(x => x.dtmReplied).Not.Nullable(); 
     Map(x => x.dtmOpened).Not.Nullable(); 
     Map(x => x.dtmClicked).Not.Nullable(); 
     Map(x => x.UserId).Not.Nullable(); 
     Map(x => x.blnTrackOpens).Nullable(); 
     Map(x => x.blnTrackClicks).Nullable(); 
     Map(x => x.blnTrackReplies).Nullable(); 
     Map(x => x.blnOutlookRec).Nullable(); 
     Map(x => x.lngMergeID).Nullable(); 
     Map(x => x.strSenderEmailAddress).Not.Nullable(); 
    } 

无财产链接到我的收件人表。只需从电子邮件表中获取PK,并通过不同的查询处理器添加该PK。

回答

0

试试这个

var list = session.QueryOver<tblSentEmails >().JoinQueryOver(tblsentsmails => 
tblsentsmails.tblrecipients).Where(tblsentsmails => tblsentsmails.lngMergeID == 11099) 
.OrderBy(tblsentsmails =>tblsentsmails.strEmailAddress).List(); 
+0

忘了提及,tblRecipients的tblSentEmails中没有任何属性@Feras –

+0

你如何映射你的类? @RahulKishore –

+0

我已经解决了这个问题,但感谢您的意见。看到我发布的答案。 –

0

算了,结束了使用下列内容:

    strQuery = "SELECT strEmailAddress, strSubject from tblSentEmails INNER JOIN tblRecipients ON tblSentEmails.strEmailSendID=tblRecipients.strEmailSendID WHERE tblSentEmails.lngMergeID=:mergeID ORDER BY strEmailAddress ASC"; 
       var qry = _session.CreateSQLQuery(strQuery) 
        .SetParameter("mergeID", lngMergeID) 
        .List(); 

结束了工作正常。也许不是最好的解决方案,但现在就足够了。