C# .Net实体框架检查值是否存在于不同的表中

C# .Net实体框架检查值是否存在于不同的表中,c#,sql,.net,sql-server,entity-framework,C#,Sql,.net,Sql Server,Entity Framework,我使用以下函数检查4个不同表中是否存在Id,并返回布尔值: public bool CheckIfUsed(int targetId) { bool isUsedOnTable1 = false; bool isUsedOnTable2 = false; bool isUsedOnTable3 = false; bool isUsedOnTable4 = false;

我使用以下函数检查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个不同查询的性能问题。是否有任何方法可以同时检查四个表,或者有任何其他方法可以提高性能


提前感谢。

我认为您应该使用where first来提高性能

this.DbContext.table1.Where(TargetID => TargetID == targetId).Select(target => target.TargetID).Count()
因为您首先获取数据,然后处理它

另一条路

生成一个泛型类,该类获取对象查询,然后从这些类和一个大批量中获取命令

GoodLuck

您可以使用和禁用跟踪实体和异步执行来提高这样的性能

public async Task CheckIfUsed(int-targetId)
{
任务isUsedOnTable1Task=false;
任务isUsedOnTable2Task=false;
任务isUsedOnTable3Task=false;
任务isUsedOnTable4Task=false;
bool isUsedOnTable1=假;
bool isUsedOnTable2=假;
bool isUsedOnTable3=假;
bool isUsedOnTable4=假;
isUsedOnTable1Task=this.DbContext.table1.AsNoTracking().Select(target=>target.TargetID).Where(TargetID=>TargetID==TargetID).CountAsync();
isUsedOnTable2Task=this.DbContext.table2.AsNoTracking().Select(target=>target.TargetID).Where(TargetID=>TargetID==TargetID).CountAsync();
isUsedOnTable3Task=this.DbContext.table3.AsNoTracking().Select(target=>target.TargetId).Where(TargetId=>TargetId==TargetId).CountAsync();
isUsedOnTable4Task=this.DbContext.table4.AsNoTracking().Select(target=>target.TargetID).Where(TargetID=>TargetID==TargetID).CountAsync();
等待任务。当所有(IsUsedOnTable1任务、IsUsedOnTable2任务、IsUsedOnTable3任务、IsUsedOnTable4任务)
isUsedOnTable1=isUsedOnTable1任务。结果>0;
isUsedOnTable2=isUsedOnTable2Task.Result>0;
isUsedOnTable3=isUsedOnTable3任务。结果>0;
isUsedOnTable4=isUsedOnTable4任务。结果>0;
返回(isUsedOnTable1 | | isUsedOnTable2 | | isUsedOnTable3 | isUsedOnTable4);
}

请记住,
EntityFramework
不是

我们假设第一个查询的结果返回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;
        }
public async Task CheckIfUsed(int-targetId)
{
var isUsed=假;
isUsed=wait this.DbContext.table1.AsNoTracking().AnyAsync(TargetID=>TargetID==TargetID);
如果(已使用)
使用退货;
isUsed=wait this.DbContext.table2.AsNoTracking().AnyAsync(TargetID=>TargetID==TargetID);
如果(已使用)
使用退货;
isUsed=wait this.DbContext.table3.AsNoTracking().AnyAsync(TargetID=>TargetID==TargetID);
如果(已使用)
使用退货;
isUsed=wait this.DbContext.table4.AsNoTracking().AnyAsync(TargetID=>TargetID==TargetID);
使用退货;
}