Proper way to return a simple select from X where Y equals, or like Z dataset in DataAbstract 9?

I am trying to convert the following code which is partially converted (from IDAdataset as it was in DataAbstract 7 to modern 9.x). The function WhereCodes was simply how I did this when you could get at the dadataset.Where this way:

function WhereCodes(table: TDADataTable; fieldName,fieldValues:String;likeFlag:Boolean):Boolean;
var
 s:TStringList;
 ct:Integer;
 n : Integer;
 condition:TDASqlCondition;  // uDAPlainWhere.pas
begin
  result := False;
  if (fieldvalues='')or(Pos('''',fieldvalues)>0)or (Pos('--',fieldValues)>0)or (Pos('/*',fieldValues)>0)  then
  begin
      exit;
  end;
  if (fieldname='')or(Pos(' ',fieldName)>0)or (Pos('''',fieldName)>0) or (Pos('--',fieldName)>0) or (Pos('/*',fieldName)>0)then
  begin
      exit;
  end;

  if likeFlag then
    condition := cLike
  else
    condition := cEqual;

  if Pos(',',fieldvalues) = 0 then
  begin
    if likeFlag then
    begin
       fieldValues := fieldValues + '%';
    end;

    {ds.}
    table.Where.AddCondition( fieldName, condition, fieldValues );
  end
  else
  begin

    s := TStringList.Create;
    s.Delimiter := ',';
    try
      s.DelimitedText := fieldValues;
      ct := s.Count-1;
      if s[ct]='' then
        dec(ct);
      for n := 0 to ct do
      begin
        fieldValues := s[n];
        if likeFlag then
        begin
           fieldValues := fieldValues + '%';
        end;
        table.Where.AddCondition(fieldName,condition,fieldValues);
        if (n<ct) then
          table.Where.AddOperator(opOR);
      end;
    finally
      s.Free;
    end;
  end;
end;

function TMyDataService.GetSelectedAssets(Connection: IDAConnection; abarcode: String; prefixMatch: Boolean): IDADataset;
begin
  Result := Schema.NewDataset(Connection, 'SelectedAssets');  // <-- How do I generate a new dataset and run a "SELECT FROM SelectedAssets WHERE ASSET_CODE = <abarcode>".  Due to DA design we should be returning ISomething (interface)
  WhereCodes(Result, 'ASSET_CODE', abarcode, prefixMatch);
  Result.Open;
end;

you can do this like:

function WhereCodes(ds: IDADataset; fieldName,fieldValues:String;likeFlag:Boolean):Boolean;
var
  s:TStringList;
  ct:Integer;
  n : Integer;
  condition: TDASQLCondition;  // uDAPlainWhere.pas
  dw: TDAWhere;
begin
  result := False;
  if (fieldvalues='')or(Pos('''',fieldvalues)>0)or (Pos('--',fieldValues)>0)or (Pos('/*',fieldValues)>0)  then
  begin
    exit;
  end;
  if (fieldname='')or(Pos(' ',fieldName)>0)or (Pos('''',fieldName)>0) or (Pos('--',fieldName)>0) or (Pos('/*',fieldName)>0)then
  begin
    exit;
  end;

  if likeFlag then
    condition := cLike
  else
    condition := cEqual;

  dw:= TDAWhere.Create(ds.Fields, False);
  try
    if Pos(',',fieldvalues) = 0 then
    begin
      if likeFlag then
      begin
         fieldValues := fieldValues + '%';
      end;
      {ds.}
      dw.AddCondition( fieldName, condition, fieldValues );

    end
    else
    begin
      s := TStringList.Create;
      s.Delimiter := ',';
      try
        s.DelimitedText := fieldValues;
        ct := s.Count-1;
        if s[ct]='' then
          dec(ct);
        for n := 0 to ct do
        begin
          fieldValues := s[n];
          if likeFlag then
          begin
             fieldValues := fieldValues + '%';
          end;
          dw.AddCondition(fieldName,condition,fieldValues);
          if (n<ct) then
            dw.AddOperator(opOR);
        end;
      finally
        s.Free;
      end;
    end;
  finally
    (ds as IDALegacyWhereSupport).WhereClause := dw.Clause;
    dw.Free;
  end;
end;

function TDataService.GetSelectedAssets(Connection: IDAConnection; abarcode: String; prefixMatch: Boolean): IDADataset;
begin
  Result := Schema.NewDataset(Connection, 'SelectedAssets');  // <-- How do I generate a new dataset and run a "SELECT FROM SelectedAssets WHERE ASSET_CODE = <abarcode>".  Due to DA design we should be returning ISomething (interface)
  WhereCodes(Result, 'ASSET_CODE', abarcode, prefixMatch);
  Result.Open;
end;