0

私は3つのテーブルを持っています。1 つはマスター テーブル (TableA) です。1 つのテーブルは、ReferencedTable と呼ばれる TableA によって参照され、最後に、ReferencedTable によって参照されるルックアップ テーブルです。

最新の 10 個のオブジェクトを次のように返すこのクエリがあります。

TableADTO TableAlias = null;
LookupTableDTO LookupTableAlias = null;
ReferencedDTO ReferencedAlias = null;

dtos = session.QueryOver(() => TableAlias)
          .JoinAlias(() => TableAlias.Object, () =>ReferencedAlias)
          .JoinAlias(() => ReferencedAlias.ObjectType, () => LookupTableAlias)
          .Where(() => ReferencedAlias.PersonId == user.Id &&
                       (LookupTableAlias.Id != INVOICE_ID ||
                        LookupTableAlias.Id != FINANCIAL_ID) &&
                       TableAlias.Status == NEW_STATUS_FLAG &&
                       ReferencedAlias.ReceivedDate < DateTime.Now)
          .Take(10)
          .List()
          .Select(dto=>
          new AbreviatedDTO
          {
              Id = dto.Referenced.Id,
              Field1 = dto.Field1,
              Priority = dto.Referenced.Priority,
              ReceivedDate = dto.Referenced.ReceivedDate,
              Field1 = dto.Referenced.Field1,
              Type = dto.Referenced.Lookup.TypeCode,
              Status = dto.Status
          }).ToList();    

これは期待どおりに機能します。ただし、以下の変換も機能すると思いました。10 個のオブジェクトが表示されますが、オブジェクトにはすべてデフォルト値があり、入力されていません (たとえば、AbreviatedDTO.ReceivedDate = DateTime.Minimum)。QueryOver に何か問題がありますか?

どんな助けでも大歓迎です。ビルN

TableDTO TableAlias = null;
LookupTableDTO LookupTableAlias = null;
ReferencedDTO ReferencedAlias = null;

dtos = session.QueryOver(() => TableAlias)
          .JoinAlias(() => TableAlias.Object, () =>ReferencedAlias)
          .JoinAlias(() => ReferencedAlias.ObjectType, () => LookupTableAlias)
          .Where(() => ReferencedAlias.PersonId == user.Id &&
                       (LookupTableAlias.Id != INVOICE_ID ||
                        LookupTableAlias.Id != FINANCIAL_ID) &&
                       TableAlias.Status == NEW_STATUS_FLAG &&
                       ReferencedAlias.ReceivedDate < DateTime.Now)
 .SelectList(list => list
                        .Select(x => TableAlias.Field1)
                        .Select(x => ReferencedAlias.Id)
                        .Select(x => ReferencedAlias.Field1)
                        .Select(x => ReferencedAlias.ReceivedDate)
                        .Select(x => ReferencedAlias.Priority)
                        .Select(x => LookupTableAlias.TypeCode))
.TransformUsing(Transformers.AliasToBean<AbreviatedDTO>())
          .Take(10)
  .List<AbreviatedDTO>()
4

1 に答える 1

0

結果のdtoのpropertynameと同じ、選択した各フィールドのエイリアスを定義する必要があります

AbreviatedDTO alias = null;

// in query
    .SelectList(list => list
        .Select(() => TableAlias.Field1).WithAlias(() => alias.Field1)
于 2013-02-15T10:55:37.527 に答える