我需要在客户数据库上编写一个动态查询,以获取客户的几个字段。
以下是代码:
[Route("api/getBasicCustList/{argType}/{argValue}")]
[HttpGet]
[Authorize]
public dynamic getCustomerDataUsername(String argType, String argValue)
{
IQueryable<CustomerDTO> query =
(from recordset in db.Customers
select new CustomerDTO
{
companyId = recordset.Company.Id,
contactNum = recordset.ContactNum,
username = recordset.UserName,
emailAddress = recordset.Email,
fullName = recordset.FullName,
accountNumber = recordset.RCustId
}
);
switch (argType)
{
case "username" :
query = query.Where(c => c.username.StartsWith(argValue));
break;
case "contactnum":
long mobNum = Int64.Parse(argValue);
query = query.Where(c => c.contactNum == mobNum);
break;
case "fullname":
query = query.Where(c => c.fullName.Contains(argValue));
break;
}
return new { data = query.ToList() };
}
这很好用,符合我的需求。
我的问题是,当我编写查询的第一部分以获取所有客户记录,并稍后动态应用 where 条件时,结果是在内存中获取还是完整的查询一次性在数据库中生成和执行?
由于目前只有 500 条记录,我无法找到任何性能滞后,但当我将其投入生产时,我将处理至少 200,000 到 300,000 条记录。
.Where(c => c.fullName.Contains(argValue))
时)。然而,这完全取决于数据量有多大。 - Torbjörn Hansson