处理queryover投影中的空值

时间:2012-05-03 15:14:28

标签: c# nhibernate queryover

我有一个对应方,有一个地址,可能会分配一个国家/地区。

我该如何处理:

InvoiceAddress invoiceAddres = null;
Country InvoiceAddressCountry = null;
Counterpart counterpart = null;
CounterpartTabDTO result = null;

// projections for DTO-mapping
var projections = new[]
                      {
                          Projections.Property(() => counterpart.CounterpartId).WithAlias(() => result.InternalID),
                          Projections.Property(() => counterpart.GlobalCounterpartId).WithAlias(() => result.BasicInfo_GlobalCounterpartyID),
                          Projections.Property(() => counterpart.Name).WithAlias(() => result.BasicInfo_Name),
                          Projections.Property(() => counterpart.ShortName).WithAlias(() => result.BasicInfo_ShortName),
                          Projections.Property(() => counterpart.PhoneNumber).WithAlias(() => result.BasicInfo_Telephone),
                          Projections.Property(() => counterpart.Webpage).WithAlias(() => result.BasicInfo_WWW),
                          Projections.Property(() => counterpart.Language).WithAlias(() => result.BasicInfo_Language),
                          Projections.Property(() => counterpart.VAT).WithAlias(() => result.BasicInfo_VAT),
                          Projections.Property(() => counterpart.CompanyRegistrationNumber).WithAlias(() => result.BasicInfo_CompanyRegistationno),
                          Projections.Property(() => invoiceAddres.Name).WithAlias(() => result.BasicInfo_InvoiceAddressContactPerson),
                          Projections.Property(() => invoiceAddres.Street).WithAlias(() => result.BasicInfo_InvoiceAddressAddress),
                          Projections.Property(() => invoiceAddres.PostalCode).WithAlias(() => result.BasicInfo_InvoiceAddressPostalCode),
                          Projections.Property(() => invoiceAddres.City).WithAlias(() => result.BasicInfo_InvoiceAddressCity),
                          Projections.Property(() => invoiceAddres.Area).WithAlias(() => result.BasicInfo_InvoiceAddressArea),
                          Projections.Property(() => InvoiceAddressCountry.PrintableName).WithAlias(() => result.BasicInfo_InvoiceAddressCountry),
                          Projections.Property(() => invoiceAddres.Department).WithAlias(() => result.BasicInfo_InvoiceAddressDepartment),
                          Projections.Property(() => invoiceAddres.Fax).WithAlias(() => result.BasicInfo_InvoiceAddressFax),
                          Projections.Property(() => invoiceAddres.MainEmail).WithAlias(() => result.BasicInfo_InvoiceAddressEmail),
                      };
var query = Session.QueryOver(() => counterpart)
    .JoinQueryOver<InvoiceAddress>(x => x.InvoiceAddresses, () => invoiceAddres)
    .Where(x => x.IsDefault)
    .JoinQueryOver<Country>(() => invoiceAddres.Country, () => InvoiceAddressCountry)
    .Select(projections);

问题是InvoiceAddressCountry,可能为null。如果发生这种情况,我希望结果.BasicInfo_InvoiceAddressCountry属性保持为null。 为了澄清,上面的代码不起作用。它无法处理null。

1 个答案:

答案 0 :(得分:1)

从你的话来说,我可以假设你需要使用左连接:

.Left.JoinQueryOver(() => invoiceAddres.Country, () => InvoiceAddressCountry)