坚决养成把每天收获的每个知识点记录下来的习惯
昨天研究了一下EFcore中的操作其中的Include、ThenInclude、GetAllIncluding、whereif等用到的小方法都一一记录下,方便日后回看。
我们来第一个操作(Get):根据用户输入的姓名(模糊查询)、ID关联查询数据库表并进行return
由于公司代码不方便泄露,我在这里进行了简单的更改变量名,但是道理都是一样的。
public async Task<PxDto<xListDto>> GetPaged(GetxInput input)
{
var query = _entityRepository.GetAllIncluding(c => c.Image).Include(c => c.Pxs)
.WhereIf(!input.Name.IsNullOrEmpty(), t => t.Names.Contains(input.Name))
.WhereIf(input.Id.HasValue, c => c.Px.Any(d => d.Id == input.Id));
// TODO:根据传入的参数添加过滤条件
var count = await query.CountAsync();
var entityList = query
.OrderBy(input.Sorting).AsNoTracking()
.PageBy(input)
.ToList();
// var entityListDtos = ObjectMapper.Map<List<ProductListDto>>(entityList);
var entityListDtos =entityList.MapTo<List<xListDto>>();
return new PagedResultDto<PxDto>(count,entityListDtos);
知识点总结
1、在这里简述一下GetAllIncluding是所有需要查表中的共有字段
2、Include进行关联的表
3、whereIf在这里我们可以看到它有两个参数,那么第一个参数是判断条件,如上代码显示!input.Name.IsNullOrEmpty()在这里就是做为判断当用户输入的Name不为空的时候再回执行后面的操作。input.Id.HasValue同理Id具有返回值,也就是存在的时候执行后面的操作
4、Contains进行模糊查询Any确定序列中的任何元素是否满足条件。
下面进行第二个操作(post):异步获取符合条件下的库存数并判断用户输入需要的商品数仓库是否足够
[HttpPost]
public async Task<int> GetTOF(Selectedombo input)
{
var query = await _entityRepository.GetAsync(input.Specifi.Id.Value);
// List<Inventory> It = query.Inventories.ToList();
// var a = It[0].InventoryNum;
int InvetorN=0;
var b = query.Inventories.ToList();
foreach (var a in b)
{
if(a.Date.Date==input.ValidDate.GetValueOrDefault().Date)
{
if((int)a.Num-(int)input.Quantity>=0)
{
InvetorN = (int)a.Num - (int)input.Quantity;
break;
}
else
{
//商品库存不足
InvetorN = -1;
break;
}
}
else
{
//该时间无商品库存
InvetorN = -2;
break;
}
}
return InvetorN;
}
这里用到的逻辑很简单就不做过多记录。可以看到这里的方法是await 那么后面的操作就要具备异步该有的特征所以我们用了GetAsync。
OK,回见!