3

私は次のような状況にあります。私はCustomerCompanyCustomerAssignmentオブジェクトを持っています(1:1の関係で)。のプロパティの1つCompanyCustomerAssignmentはですCustomerGroup。さて、このグループに属するフェッチよりも、渡されQueryOverたときに-したいのですが、nullになると、すべてにクエリを実行したいと思います。「SQL」では簡単に思えます。CustomerGroupCustomers

...WHERE CustomerGroupId = @param OR @param is NULL;

残念ながら、QueryOverについてcustGrpはわかりません(パラメータです-オブジェクトまたはnull

Customer c = null;
CompanyCustomerAssignment cca = null;

_session.QueryOver<Customer>(() => c)
    .JoinAlias(() => c.CompanyCustomerAssignment, () => cca)
    .Where(() => cca.Company == currentCompany && c.IsActive == true)
    .And(() => cca.CustomerGroup == custGrp || custGrp == null ) // <- this seems to be problem to me
    .List()
    .Select(x => new CustomerApiModel() {CustomerId = x.Id})
    .ToList();

しかし、これは機能しません-そのCustomerようなプロパティを持たないメッセージを受け取ります。これは論理的に聞こえますが、まったく役に立ちません。

4

1 に答える 1

4

@param is NULLこの場合、クエリが実行される前、またはアセンブルされる前の条件がわかっています。custGrpそれでは、基準が満たされている場合にのみ、基準を拡張してみましょう。

var criteria = _session.QueryOver<Customer>(() => c)
    .JoinAlias(() => c.CompanyCustomerAssignment, () => cca)
    .Where(() => cca.Company == currentCompany && c.IsActive == true);

// if during the query build
if(custGrp != null)
{
  criteria.Where(() => cca.CustomerGroup == custGrp);
}

var results = criteria
    .List()
    ... 

これにより、SQL部分がより効率的になり、より多くのトリックを実行できるようになります...

于 2013-01-28T05:54:05.543 に答える