Start Implementing XBaseFileProvider ...
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using xCommons.Extensions;
|
||||
using xFileService.Models.Dtos;
|
||||
using xFileService.Models.Entities;
|
||||
@@ -11,7 +12,7 @@ namespace xFileService.Extensions
|
||||
/// </summary>
|
||||
/// <param name="source"></param>
|
||||
/// <returns></returns>
|
||||
public static XFileDto ToXFileDto(this XFile source)
|
||||
public static XFileDto ToDto(this XFile source)
|
||||
{
|
||||
//
|
||||
XFileDto result = null;
|
||||
@@ -21,25 +22,54 @@ namespace xFileService.Extensions
|
||||
{
|
||||
//
|
||||
result = new XFileDto();
|
||||
result = result.UpdateData(source);
|
||||
|
||||
//
|
||||
// result = new XFileDto
|
||||
// {
|
||||
// Id = source.Id,
|
||||
// Type = source.Type,
|
||||
// OwnerId = source.OwnerId,
|
||||
// Name = source.Name,
|
||||
// Path = source.Path,
|
||||
// Thumb = source.Thumb,
|
||||
// ThumbPath = source.ThumbPath,
|
||||
// UploadedOn = source.UploadedOn,
|
||||
// FileName = source.FileName
|
||||
// };
|
||||
result = result.UpdateData(
|
||||
updateWith: source,
|
||||
propertyBlackList: new List<string>
|
||||
{
|
||||
nameof(XFileDto.Owner),
|
||||
nameof(XFile.Deleted),
|
||||
nameof(XFile.References),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a Dto to Entity Representation ...
|
||||
/// Ignore ID Property ...
|
||||
/// </summary>
|
||||
/// <param name="source"></param>
|
||||
/// <returns></returns>
|
||||
public static XFile FromDto(this XFileDto source)
|
||||
{
|
||||
//
|
||||
var result = new XFile();
|
||||
|
||||
//
|
||||
if (!source.IsNull())
|
||||
{
|
||||
//
|
||||
result = result.UpdateData(
|
||||
updateWith: source,
|
||||
propertyBlackList: new List<string>
|
||||
{
|
||||
nameof(XFile.Deleted),
|
||||
nameof(XFile.References),
|
||||
}
|
||||
);
|
||||
|
||||
//
|
||||
if (!source.References.IsNull() && source.References.HasChild()) {
|
||||
result.References = source.References.ToListString();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using xFileService.Models.Dtos;
|
||||
using xFileService.Models.Entities;
|
||||
using xIdentityModels.Models;
|
||||
using xModels.Dtos;
|
||||
using XFileDto = xFileService.Models.Dtos.XFileDto;
|
||||
|
||||
// using xModels.Dtos;
|
||||
using xTagService.Interfaces;
|
||||
|
||||
namespace xFileService.Interfaces
|
||||
{
|
||||
public interface IXBaseFileProvider<TKey>
|
||||
{
|
||||
//
|
||||
#region Props ...
|
||||
/// <summary>
|
||||
/// Specified Provider ...
|
||||
/// </summary>
|
||||
string ProvideFor { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Specified Provider Repositroy ...
|
||||
/// </summary>
|
||||
IXFileProvider Provider { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Tag Provider for Specified File ...
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
IXBaseTagProvider<TKey> TagProvider { get; }
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Helper ...
|
||||
/// <summary>
|
||||
/// Get Specified Identifier ...
|
||||
/// </summary>
|
||||
/// <param name="forProvidedId"></param>
|
||||
/// <returns></returns>
|
||||
string GetIdentifier(TKey forProvidedId);
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Implementation ...
|
||||
/// <summary>
|
||||
/// Stream Specified File ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<FileStreamResult> Stream(Guid id);
|
||||
|
||||
/// <summary>
|
||||
/// Stream Specified File ...
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
Task<FileStreamResult> Stream(string fileName);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Download Specified File ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<PhysicalFileResult> Download(Guid id);
|
||||
|
||||
/// <summary>
|
||||
/// Download Specified File ...
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
Task<PhysicalFileResult> Download(string fileName);
|
||||
|
||||
/// <summary>
|
||||
/// Upload Files ...
|
||||
/// </summary>
|
||||
/// <param name="files"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<XFileDto>> Upload(
|
||||
IFormFileCollection files,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Remove Specified Files ...
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<Guid>> Remove(
|
||||
string ids,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve Specified File Streaming Info ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileStreamDescriptorDto> GetFileDescriptor(Guid id);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve Specified File Streaming Info ...
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileStreamDescriptorDto> GetFileDescriptor(string fileName);
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Data Model ...
|
||||
/// <summary>
|
||||
/// Get Specified File Model ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ignoreSoftDeleteds"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileDto> Get(
|
||||
Guid id
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Get All Exists File Models ...
|
||||
/// </summary>
|
||||
/// <param name="ignoreSoftDeleteds"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<XFileDto>> GetAll();
|
||||
|
||||
/// <summary>
|
||||
/// find an Entity by providing a Conditional Expression ...
|
||||
/// </summary>
|
||||
/// <param name="whereClause"></param>
|
||||
Task<XFileDto> FindOne(Expression<Func<XFile, bool>> whereClause);
|
||||
|
||||
/// <summary>
|
||||
/// find a collection of Entities by proving a Conditional Expression ...
|
||||
/// </summary>
|
||||
/// <param name="whereClause"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<XFileDto>> FindMany(
|
||||
Expression<Func<XFile, bool>> whereClause
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// retrieve Entities based on XQuery Pagination structure ...
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <returns></returns>
|
||||
Task<XQueryResult<XFileDto>> Query(
|
||||
XQuery query
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// retrieve Entities based on XQuery Pagination structure by providing a Conditional Expression ...
|
||||
/// </summary>
|
||||
/// <param name="whereClause"></param>
|
||||
/// <param name="query"></param>
|
||||
/// <returns></returns>
|
||||
Task<XQueryResult<XFileDto>> ConditionalQuery(
|
||||
Expression<Func<XFile, bool>> whereClause,
|
||||
XQuery query
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Update an Entity values ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="item"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileDto> Update(
|
||||
Guid id,
|
||||
XFileDto item,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// remove an Entity ...
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileDto> Remove(
|
||||
Guid id,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// count all exists Entities ...
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<int> Count();
|
||||
|
||||
/// <summary>
|
||||
/// Check an Entity exists or not ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<bool> IsExists(
|
||||
Guid id
|
||||
);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,30 @@ namespace xFileService.Interfaces
|
||||
XDataServiceConfiguration DataSercviceConfiguration { get; }
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Helpers ...
|
||||
/// <summary>
|
||||
/// Converts an Entity to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileDto> ToDto(XFile model);
|
||||
|
||||
/// <summary>
|
||||
/// Convert a List of Entities to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<XFileDto>> ToDtoList(IEnumerable<XFile> list);
|
||||
|
||||
/// <summary>
|
||||
/// Converts an Entity Query Result to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="queryResult"></param>
|
||||
/// <returns></returns>
|
||||
Task<XQueryResult<XFileDto>> ToDtoQueryResult(XQueryResult<XFile> queryResult);
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Tools ...
|
||||
/// <summary>
|
||||
@@ -189,29 +213,5 @@ namespace xFileService.Interfaces
|
||||
Guid id
|
||||
);
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Helpers ...
|
||||
/// <summary>
|
||||
/// Converts an Entity to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
Task<XFileDto> ToXFileDto(XFile model);
|
||||
|
||||
/// <summary>
|
||||
/// Convert a List of Entities to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
Task<IEnumerable<XFileDto>> ToXDtoList(IEnumerable<XFile> list);
|
||||
|
||||
/// <summary>
|
||||
/// Converts an Entity Query Result to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="queryResult"></param>
|
||||
/// <returns></returns>
|
||||
Task<XQueryResult<XFileDto>> ToXDtoQueryResult(XQueryResult<XFile> queryResult);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using xCommons.Constants;
|
||||
using xModels.Base;
|
||||
using xModels.Dtos;
|
||||
@@ -19,5 +20,7 @@ namespace xFileService.Models.Dtos
|
||||
|
||||
public string OwnerId { get; set; }
|
||||
public XPersonDto Owner { get; set; }
|
||||
|
||||
public IList<string> References = new List<string>();
|
||||
}
|
||||
}
|
||||
@@ -64,5 +64,12 @@ namespace xFileService.Models.Entities
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public string FileName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Comma Separated List Which Provides Pointer to Specified
|
||||
/// Model for Describe ...
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public string References { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using xFileService.Interfaces;
|
||||
using xTagService.Interfaces;
|
||||
|
||||
namespace xFileService.Providers
|
||||
{
|
||||
public class XBaseFileProvider<TKey> : IXBaseFileProvider<TKey>
|
||||
{
|
||||
//
|
||||
#region Props ...
|
||||
/// <summary>
|
||||
/// Specified Provider ...
|
||||
/// </summary>
|
||||
public string ProvideFor { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Specified Provider Repositroy ...
|
||||
/// </summary>
|
||||
public IXFileProvider Provider { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Tag Provider for Specified File ...
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public IXBaseTagProvider<TKey> TagProvider { get; }
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+109
-109
@@ -57,6 +57,106 @@ namespace xFileService.Providers
|
||||
}
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Helpers ...
|
||||
/// <summary>
|
||||
/// Converts an Entity to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<XFileDto> ToDto(XFile model)
|
||||
{
|
||||
//
|
||||
XFileDto result = null;
|
||||
|
||||
//
|
||||
if (!model.IsNullOrDefault())
|
||||
{
|
||||
//
|
||||
result = model.ToDto();
|
||||
|
||||
//
|
||||
// Prepare Inner API Providers Device Dto ...
|
||||
var device = IdentityProvider.GetDevice();
|
||||
var userInfo = await IdentityProvider.GetUserInfo(
|
||||
device: device,
|
||||
userSelectByParam: model.OwnerId
|
||||
);
|
||||
if (userInfo.IsNullOrDefault())
|
||||
{
|
||||
XException.NotFound.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
result.Owner = userInfo.ToXPersonDto();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a List of Entities to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IEnumerable<XFileDto>> ToDtoList(IEnumerable<XFile> list)
|
||||
{
|
||||
//
|
||||
var result = new List<XFileDto>();
|
||||
|
||||
//
|
||||
if (!list.IsNull() && list.HasChild())
|
||||
{
|
||||
//
|
||||
foreach (var item in list)
|
||||
{
|
||||
//
|
||||
var dto = await ToDto(item);
|
||||
if (!dto.IsNullOrDefault())
|
||||
{
|
||||
result.Add(dto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts an Entity Query Result to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="queryResult"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<XQueryResult<XFileDto>> ToDtoQueryResult(XQueryResult<XFile> queryResult)
|
||||
{
|
||||
//
|
||||
var result = new XQueryResult<XFileDto>();
|
||||
|
||||
//
|
||||
if (!queryResult.IsNullOrDefault())
|
||||
{
|
||||
//
|
||||
result.Page = queryResult.Page;
|
||||
result.PageSize = queryResult.PageSize;
|
||||
result.TotalItems = queryResult.TotalItems;
|
||||
result.TotalPages = queryResult.TotalPages;
|
||||
result.TotalFilteredItems = queryResult.TotalFilteredItems;
|
||||
result.TotalFilteredPages = queryResult.TotalFilteredPages;
|
||||
|
||||
//
|
||||
if (!queryResult.Items.IsNull() && queryResult.Items.HasChild())
|
||||
{
|
||||
result.Items = await ToDtoList(queryResult.Items);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Tools ...
|
||||
/// <summary>
|
||||
@@ -280,7 +380,7 @@ namespace xFileService.Providers
|
||||
|
||||
//
|
||||
// Preparing Result ...
|
||||
var result = await ToXDtoList(entities);
|
||||
var result = await ToDtoList(entities);
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -569,7 +669,7 @@ namespace xFileService.Providers
|
||||
}
|
||||
|
||||
//
|
||||
var result = await ToXFileDto(entitiy);
|
||||
var result = await ToDto(entitiy);
|
||||
if (result.IsNullOrDefault())
|
||||
{
|
||||
XException.ActionFailed.Throw();
|
||||
@@ -594,7 +694,7 @@ namespace xFileService.Providers
|
||||
if (!entities.IsNull() && entities.HasChild())
|
||||
{
|
||||
//
|
||||
result = (await ToXDtoList(entities))
|
||||
result = (await ToDtoList(entities))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
@@ -615,7 +715,7 @@ namespace xFileService.Providers
|
||||
var entity = await FileRepository.FindOneAsync(whereClause);
|
||||
if (!entity.IsNullOrDefault())
|
||||
{
|
||||
result = await ToXFileDto(entity);
|
||||
result = await ToDto(entity);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -639,7 +739,7 @@ namespace xFileService.Providers
|
||||
if (!entities.IsNull() && entities.HasChild())
|
||||
{
|
||||
//
|
||||
result = (await ToXDtoList(entities))
|
||||
result = (await ToDtoList(entities))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
@@ -663,7 +763,7 @@ namespace xFileService.Providers
|
||||
var queryResult = await FileRepository.QueryAsync(query);
|
||||
if (!queryResult.IsNullOrDefault())
|
||||
{
|
||||
result = await ToXDtoQueryResult(queryResult);
|
||||
result = await ToDtoQueryResult(queryResult);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -691,7 +791,7 @@ namespace xFileService.Providers
|
||||
);
|
||||
if (!queryResult.IsNullOrDefault())
|
||||
{
|
||||
result = await ToXDtoQueryResult(queryResult);
|
||||
result = await ToDtoQueryResult(queryResult);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -771,7 +871,7 @@ namespace xFileService.Providers
|
||||
}
|
||||
|
||||
//
|
||||
var result = await ToXFileDto(entity);
|
||||
var result = await ToDto(entity);
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -832,7 +932,7 @@ namespace xFileService.Providers
|
||||
}
|
||||
|
||||
//
|
||||
result = await ToXFileDto(entitiy);
|
||||
result = await ToDto(entitiy);
|
||||
if (result.IsNullOrDefault())
|
||||
{
|
||||
XException.ActionFailed.Throw();
|
||||
@@ -863,105 +963,5 @@ namespace xFileService.Providers
|
||||
return await FileRepository.IsExistsAsync(id);
|
||||
}
|
||||
#endregion
|
||||
|
||||
//
|
||||
#region Helpers ...
|
||||
/// <summary>
|
||||
/// Converts an Entity to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<XFileDto> ToXFileDto(XFile model)
|
||||
{
|
||||
//
|
||||
XFileDto result = null;
|
||||
|
||||
//
|
||||
if (!model.IsNullOrDefault())
|
||||
{
|
||||
//
|
||||
result = model.ToXFileDto();
|
||||
|
||||
//
|
||||
// Prepare Inner API Providers Device Dto ...
|
||||
var device = IdentityProvider.GetDevice();
|
||||
var userInfo = await IdentityProvider.GetUserInfo(
|
||||
device: device,
|
||||
userSelectByParam: model.OwnerId
|
||||
);
|
||||
if (userInfo.IsNullOrDefault())
|
||||
{
|
||||
XException.NotFound.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
result.Owner = userInfo.ToXPersonDto();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a List of Entities to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IEnumerable<XFileDto>> ToXDtoList(IEnumerable<XFile> list)
|
||||
{
|
||||
//
|
||||
var result = new List<XFileDto>();
|
||||
|
||||
//
|
||||
if (!list.IsNull() && list.HasChild())
|
||||
{
|
||||
//
|
||||
foreach (var item in list)
|
||||
{
|
||||
//
|
||||
var dto = await ToXFileDto(item);
|
||||
if (!dto.IsNullOrDefault())
|
||||
{
|
||||
result.Add(dto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts an Entity Query Result to Dto ...
|
||||
/// </summary>
|
||||
/// <param name="queryResult"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<XQueryResult<XFileDto>> ToXDtoQueryResult(XQueryResult<XFile> queryResult)
|
||||
{
|
||||
//
|
||||
var result = new XQueryResult<XFileDto>();
|
||||
|
||||
//
|
||||
if (!queryResult.IsNullOrDefault())
|
||||
{
|
||||
//
|
||||
result.Page = queryResult.Page;
|
||||
result.PageSize = queryResult.PageSize;
|
||||
result.TotalItems = queryResult.TotalItems;
|
||||
result.TotalPages = queryResult.TotalPages;
|
||||
result.TotalFilteredItems = queryResult.TotalFilteredItems;
|
||||
result.TotalFilteredPages = queryResult.TotalFilteredPages;
|
||||
|
||||
//
|
||||
if (!queryResult.Items.IsNull() && queryResult.Items.HasChild())
|
||||
{
|
||||
result.Items = await ToXDtoList(queryResult.Items);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user