C# MVC-foreach循环中的计数,最佳实践
我一直在努力在foreach循环中获取计数记录。我需要在一个页面上运行许多这样的计数。我正在寻找最有效的方法来做到这一点 我已经走了这么远,但我不确定我是否走上了正确的道路。如果是,我如何将这些数据输入到我的视图中 视图模型C# MVC-foreach循环中的计数,最佳实践,c#,asp.net-mvc,foreach,C#,Asp.net Mvc,Foreach,我一直在努力在foreach循环中获取计数记录。我需要在一个页面上运行许多这样的计数。我正在寻找最有效的方法来做到这一点 我已经走了这么远,但我不确定我是否走上了正确的道路。如果是,我如何将这些数据输入到我的视图中 视图模型 public class AgtLeadStatsListVM { public string LoanAgent { get; set; } public DateTime LeadDate { get; set; } public int Lea
public class AgtLeadStatsListVM
{
public string LoanAgent { get; set; }
public DateTime LeadDate { get; set; }
public int LeadDailyCt { get; set; }
public int LeadWeeklyCt { get; set; }
public int LeadMTDCt { get; set; }
public int LeadYTDCt { get; set; }
public IEnumerable<MWFUser> AgentList { get; set; }
public virtual WebLead Lead { get; set; }
}
公共类AgtLeadStatsListVM
{
公共字符串借词{get;set;}
公共日期时间前置日期{get;set;}
public int leaddaillyct{get;set;}
public int LeadWeeklyCt{get;set;}
public int LeadMTDCt{get;set;}
public int LeadYTDCt{get;set;}
公共IEnumerable代理列表{get;set;}
公共虚拟WebLead{get;set;}
}
控制器
var model = new AgtLeadStatsListVM();
{
// Get Selected Agent's Information
var AgentList = from l in db.MWFUsers
where (l.UserTitle == "Banker"
select l;
foreach (var agent in AgentList)
{
// Daily Lead Count
var LeadDailyCt = db.WebLeads.Count(x => (x.LoanAgent == agent.UserEmail)
&& (x.LeadDate >= todayDate && x.LeadDate <= todayEndDay));
// Weekly Lead Count
var LeadWeeklyCt = db.WebLeads.Count(x => (x.LoanAgent == agent.UserEmail)
&& x.LeadDate >= firstOfWeek
&& x.LeadDate <= todayEndDay);
// Monthly Lead Count
var LeadMTDCount = db.WebLeads.Count(x => (x.LoanAgent == agent.UserEmail)
&& x.LeadDate >= firstOfMonth
&& x.LeadDate <= todayEndDay);
// YTD Lead Count
var LeadYTDCount = db.WebLeads.Count(x => (x.LoanAgent == agent.UserEmail)
&& x.LeadDate >= firstOfMonth
&& x.LeadDate <= todayEndDay);
}
}
var model=new AgtLeadStatsListVM();
{
//获取所选代理的信息
var AgentList=从db.mwfuser中的l开始
其中(l.UserTitle==“银行家”
选择l;
foreach(代理列表中的var代理)
{
//每日铅含量
var LeadDailyCt=db.WebLeads.Count(x=>(x.LoanAgent==agent.UserEmail)
&&(x.LeadDate>=今天日期和&x.LeadDate(x.LoanAgent==代理.用户电子邮件)
&&x.LeadDate>=星期一
&&x.LeadDate(x.LoanAgent==agent.UserEmail)
&&x.LeadDate>=月初
&&x.LeadDate(x.LoanAgent==agent.UserEmail)
&&x.LeadDate>=月初
&&十、交货日期
我在视图上收到此错误:对象引用未设置为
对象的实例。(第行:@foreach(中的变量项)
模型(代理列表)
AgentList
为空
此外,您还没有正确初始化模型
具体来说,这行代码
var model = new AgtLeadStatsListVM();
创建类型为AgtLeadStatsListVM
的新对象,其中
LoanAgent
为空
LeadDate
1/1/0001凌晨12:00:00
leaddailyt
为0
LeadWeeklyCt
为0
LeadMTDCt
为0
leadydct
为0
AgentList
为空
WebLead
是Lead
默认值,因为您没有设置任何值。可能您希望使用对象初始值设定项,因此不需要();
。我们只编写以下内容:
var model = new AgtLeadStatsListVM
{
LoadAgent = "Name of the LoadAgent",
LeadDate = DateTime.Now.Utc,
LeadDailyCt = agents.Sum(a => db.WebLeads.Count(
x => (x.LoanAgent == a.UserEmail)
&& (x.LeadDate >= todayDate && x.LeadDate <= todayEndDay)))
// Do the same for the rest of the corresponding properties.
}
var模型=新AgtLeadStatsListVM
{
LoadAgent=“LoadAgent的名称”,
LeadDate=DateTime.Now.Utc,
LeadDailyCt=agents.Sum(a=>db.WebLeads.Count(
x=>(x.LoanAgent==a.UserEmail)
&&(x.LeadDate>=今天日期和x.LeadDate
我在视图上收到此错误:对象引用未设置为
对象的实例。(第行:@foreach(中的变量项)
模型(代理列表)
AgentList
为空
此外,您还没有正确初始化模型
具体来说,这行代码
var model = new AgtLeadStatsListVM();
创建类型为AgtLeadStatsListVM
的新对象,其中
LoanAgent
为空
LeadDate
1/1/0001凌晨12:00:00
leaddailyt
为0
LeadWeeklyCt
为0
LeadMTDCt
为0
leadydct
为0
AgentList
为空
WebLead
是Lead
默认值,因为您没有设置任何值。可能您希望使用对象初始值设定项,因此不需要();
。我们只编写以下内容:
var model = new AgtLeadStatsListVM
{
LoadAgent = "Name of the LoadAgent",
LeadDate = DateTime.Now.Utc,
LeadDailyCt = agents.Sum(a => db.WebLeads.Count(
x => (x.LoanAgent == a.UserEmail)
&& (x.LeadDate >= todayDate && x.LeadDate <= todayEndDay)))
// Do the same for the rest of the corresponding properties.
}
var模型=新AgtLeadStatsListVM
{
LoadAgent=“LoadAgent的名称”,
LeadDate=DateTime.Now.Utc,
LeadDailyCt=agents.Sum(a=>db.WebLeads.Count(
x=>(x.LoanAgent==a.UserEmail)
&&(x.LeadDate>=todayDate&&x.LeadDatevar model=new AgtLeadStatsListVM();
结尾的分号意味着您在该行之后不再处于对象初始值设定项中。您可能尝试使用的语法与此类似:
var agents =
from l in db.MWFUsers
where l.UserTitle == "Banker"
select l;
var model = new AgtLeadStatsListVM
{
// Get Selected Agent's Information
AgentList = agents.ToList(),
// Daily Lead Count
LeadDailyCt = agents.Sum(a => db.WebLeads.Count(
x => (x.LoanAgent == a.UserEmail)
&& (x.LeadDate >= todayDate && x.LeadDate <= todayEndDay)))
// ...
}
更新
从你的评论来看,这听起来更像是你想要的:
var model =
(from agent in agents
let webLeads = db.WebLeads.Where(x => x.LoanAgent == agent.UserEmail)
select new AgtLeadStatsListVM
{
// Get Selected Agent's Information
LoanAgent = agent.UserEmail,
// Daily Lead Count
LeadDailyCt = webLeads.Count(x => x.LeadDate >= todayDate && x.LeadDate <= todayEndDay),
// ...
}).ToList();
var模型=
(从代理人到代理人)
让webLeads=db.webLeads.Where(x=>x.LoanAgent==agent.UserEmail)
选择新AgtLeadStatsListVM
{
//获取所选代理的信息
LoanAgent=agent.UserEmail,
//每日铅含量
leaddailyt=webLeads.Count(x=>x.LeadDate>=todayDate&&x.LeadDatevar model=new AgtLeadStatsListVM();
结尾的分号意味着在该行之后您不再是对象初始值设定项中的一员。您可能尝试使用的语法更接近以下几行:
var agents =
from l in db.MWFUsers
where l.UserTitle == "Banker"
select l;
var model = new AgtLeadStatsListVM
{
// Get Selected Agent's Information
AgentList = agents.ToList(),
// Daily Lead Count
LeadDailyCt = agents.Sum(a => db.WebLeads.Count(
x => (x.LoanAgent == a.UserEmail)
&& (x.LeadDate >= todayDate && x.LeadDate <= todayEndDay)))
// ...
}
更新
从你的评论来看,这听起来更像是你想要的:
var model =
(from agent in agents
let webLeads = db.WebLeads.Where(x => x.LoanAgent == agent.UserEmail)
select new AgtLeadStatsListVM
{
// Get Selected Agent's Information
LoanAgent = agent.UserEmail,
// Daily Lead Count
LeadDailyCt = webLeads.Count(x => x.LeadDate >= todayDate && x.LeadDate <= todayEndDay),
// ...
}).ToList();
var模型=
(从代理人到代理人)
让webLeads=db.webLeads.Where(x=>x.LoanAgent==agent.UserEmail)
选择新AgtLeadStatsListVM
{
//获取所选代理的信息
LoanAgent=agent.UserEmail,
//每日铅含量
LeadDailyCt=webLeads.Count(x=>x.LeadDate>=todayDate&&x.LeadDate我将忽略您得到的错误(请参见其他答案),仅参考最佳实践和计算部分问题的最有效方法
最有效的方法(至少在我看来)是对结果使用一些缓存技术,并每天更新缓存(因为您使用的最大分辨率是每天)。显然,选择合适的缓存机制取决于您的应用程序。它可以从在应用程序启动时将一些数据存储在静态变量中,到运行专用(或任何其他快速数据结构存储)。这里的底线是:尽量减少对DB的查询数量并缓存任何合适的数据。I