C# 用更少的时间连接两个表
我有两个表TableProject和TableFlag;我想带着一些条件加入他们。 首先,我从第一个表中得到列表,然后检查第二个表,在for循环中找到合适的值 虽然它可以工作,但速度相当慢,大约需要10秒C# 用更少的时间连接两个表,c#,linq,tsql,C#,Linq,Tsql,我有两个表TableProject和TableFlag;我想带着一些条件加入他们。 首先,我从第一个表中得到列表,然后检查第二个表,在for循环中找到合适的值 虽然它可以工作,但速度相当慢,大约需要10秒 // Step 1 get the list from the first table var temp = Task.FromResult(await myDatabase.TableProject. Select(p => new ProjectDto
// Step 1 get the list from the first table
var temp = Task.FromResult(await myDatabase.TableProject.
Select(p => new ProjectDto
{
Id = p.Id,
Name = p.Name,
Type = p.Type,
Status = p.Status
})
.Where(x => x.Type != 999)
.Orderby(y => y.Name).ToListAsync());
var list = temp.Result;
// Step 2 check the second table to find right values in a for loop.
for(int i = 0; i < list.Count; i++)
{
if(list[i].Type.HasValue)
{
list[i].ProjectType = (from f in myDatabase.TableFlag
where f.FlagName == "PROJECT TYPE" && f.FlagId == list[i].Type
select f.FlagValue).FirstOrDefaut();
}
if(list[i].Type.HasValue)
{
list[i].Status = (from f in myDatabase.TableFlag
where f.FlagName == "PROJECT STATUS" && f.FlagId == list[i].Status
select f.FlagValue).FirstOrDefaut();
}
}
return Json(list);
如果您查看步骤2,它需要^2次
更新:
Sql查询Sql是受欢迎的。我可以使用存储过程。通过连接两个表,您可以在数据库上创建一个物化视图,而不仅仅是在应用程序中获取视图的结果。如果您有SQL Server或ORACLE DB,请使用。物化视图比普通视图或仅连接要快得多。如果使用“let”子句,它们将被转换为数据库中的连接或子查询。这将减少数据库的往返次数,并且查询将运行得更快
var query =
from project in myDatabase.TableProject
where project.Type != 999
order by project.Name
let statusFlag = myDatabase.TableFlag
.FirstOrDefault(f => f.FlagName == "PROJECT STATUS" && f.FlagId == project.Status)
let typeFlag = myDatabase.TableFlag
.FirstOrDefault(f => f.FlagName == "PROJECT TYPE" && f.FlagId == project.Type)
select new ProjectDto {
Id = project.Id,
Name = project.Name,
Type = project.Type,
Status = statusFlag?.FlagValue,
ProjectType = typeFlag?.FlagValue
};
把C代码放到一边。假设您必须使用SQL编写此代码。那个查询会是什么样子?@mjwills,说得对。事实上,我不知道如何为此编写SQL查询。好的,谢谢您的输入。但是我不想创建视图,因为我没有权限。