Lak*_*aka 5 c# entity-framework
我需要在客户数据库上编写动态查询,以获得客户的少数字段.
以下是代码
[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() };
}
Run Code Online (Sandbox Code Playgroud)
这很好,正在解决我的目的.
我的问题是,当我编写我的第一部分query以获取所有客户记录,然后动态地应用where条件将结果带入内存或完整查询生成并在db中一次执行?
由于我现在只有500个记录,我无法找到任何性能滞后,但是当我将其投入生产时,我将处理至少200,000到300,000条记录.
好的,答案是
在到达方法末尾的“ToList”之前,查询不会执行
来自 @GeorgPatscheider 共享的 MSDN链接,其中提到
执行查询表达式的时间点可能会有所不同。LINQ 查询始终在迭代查询变量时执行,而不是在创建查询变量时执行。这称为延迟执行
延迟执行可以组合多个查询或扩展一个查询。当扩展查询时,它会被修改以包含新操作,并且最终执行将反映这些更改。
它还写道,如果查询有Average、Count、First、 或 中的任何一个Max,它将立即执行。
谢谢。
| 归档时间: |
|
| 查看次数: |
1831 次 |
| 最近记录: |