SQL to Aurelius

Hi, Wagner
 Considers the following schema:

  [Entity]
  [Table('PerPay')]
  TPerPay = class
  private
    [Column('Id', [TColumnProp.Required])]
    FId: Int64;

    [Column('PPStateId', [TColumnProp.Required])]
    FPPStateId: Int64;

  public
    property Id: Int64 read FId write FId;
    property PPStateId: Int64 read FPPStateId write FPPStateId;
  end;

  [Entity]
  [Table('DebItmD')]
  TDebItmD = class
  private
    [Column('Id', [TColumnProp.Required])]
    FId: Int64;
    
    [Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('PerPayId', [TColumnProp.Required], 'Id')]
    FPerPayId: Proxy<TPerPay>;

    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('DebItemId', [], 'Id')]
    FDebItemId: Proxy<TDebItem>;

    [Column('DebItmDStatusId', [TColumnProp.Required])]
    FDebItmDStatusId: Integer;
   
  public
    property Id: Int64 read FId write FId;
    property PerPayId: TPerPay read GetPerPayId write SetPerPayId;
    property DebItemId: TDebItem read GetDebItemId write SetDebItemId;
    property DebItmDStatusId: Integer read FDebItmDStatusId write FDebItmDStatusId;
  end;

  [Entity]
  [Table('DebItem')]
  TDebItem = class
  private
    [Column('Id', [TColumnProp.Required])]
    FId: Int64;
  
    [Column('ItemStateId', [TColumnProp.Required])]
    FItemStateId: Int64;
   
  public
    property Id: Int64 read FId write FId;
    property ItemStateId: Int64 read FItemStateId write FItemStateId;
  end;

Now, considers the following SQL:

SELECT A.Id, A.PPStateId
FROM PerPay A
LEFT JOIN DebItmD L ON (L.PerPayId = A.Id)
LEFT JOIN DebItem M ON (M.Id = L.DebItemId)
WHERE A.PPStateId = 0
  AND ( L.DEBITMDSTATUSID = 0 OR M.ITEMSTATEID=2)
ORDER BY  A.Id

how can I do with aurelius?

Thanks

Manager.Find<TDebItmD>

  .CreateAlias('PerPayId', 'P')
  .CeateAlias('DebItemId', 'M')
  .Where((Linq['DebItmStatusId'] = 0) or (Linq['M.ItemStateId'] = 2)
  .List;

You will get a list of TDebItmD objects which have a property PerPayId with the corresponding TPerPay object.
Hi, Wagner
  I need a TList<TPerPay>, not TList<TDebItmD>
  thanks

because, DebItmD could exist or not

In this case create a bidirectional association, adding the other side of the association in TPerPay object:




  [ManyValuedAssociation([], CascadeTypeAllRemoveOrphan, 'FPerPayId')]
  property DebItmDList: TList<TDebItmD > read FDebItmDList write FDebItmDList;


as described here: http://www.tmssoftware.biz/business/aurelius/doc/web/lazy-loading_associations.html

If your relation is 1-1 (which it seems from your SQL) you are all good, if not you can remove duplicates: http://www.tmssoftware.biz/business/aurelius/doc/web/removing_duplicated_objects.html

Ok, thanks