我有以下函数,用于检查4个不同表中是否存在一个ID并返回布尔值:
public bool CheckIfUsed(int targetId)
{
bool isUsedOnTable1 = false;
bool isUsedOnTable2 = false;
bool isUsedOnTable3 = false;
bool isUsedOnTable4 = false;
isUsedOnTable1 = this.DbContext.table1.Select(target => target.TargetID).Where(TargetID => TargetID == targetId).Count() > 0;
isUsedOnTable2 = this.DbContext.table2.Select(target => target.TargetID).Where(TargetID => TargetID == targetId).Count() > 0;
isUsedOnTable3 = this.DbContext.table3.Select(target => target.TargetId).Where(targetID => targetID == targetId).Count() > 0;
isUsedOnTable4 = this.DbContext.table4.Select(target => target.TargetID).Where(targetID => targetID == targetId).Count() > 0;
return (isUsedOnTable1 || isUsedOnTable2 || isUsedOnTable3 || isUsedOnTable4);
}
这种方法在技术上有效,这里的问题是每次执行此功能时都有4个不同查询的性能问题。有什么方法可以同时检查这四个表,或者有其他方法可以提高性能吗?
提前致谢。
我们假设第一个查询的结果返回true,而不必查询其他表。另外,您不需要数据计数。这样,应该是
public async Task<bool> CheckIfUsed(int targetId)
{
var isUsed = false;
isUsed = await this.DbContext.table1.AsNoTracking().AnyAsync(TargetID => TargetID == targetId);
if (isUsed)
return isUsed;
isUsed = await this.DbContext.table2.AsNoTracking().AnyAsync(TargetID => TargetID == targetId);
if (isUsed)
return isUsed;
isUsed = await this.DbContext.table3.AsNoTracking().AnyAsync(TargetID => TargetID == targetId);
if (isUsed)
return isUsed;
isUsed = await this.DbContext.table4.AsNoTracking().AnyAsync(TargetID => TargetID == targetId);
return isUsed;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句