我是Linq和MVC的新手,并且已经进行了大量的搜索和学习以达到这一点。
我有以下方法成功接收参数" code"。
public ActionResult GetIssueList(string code)
{
//dynamic fill of project code dropdown on selection of customer code drop down
ProjectManager pm = new ProjectManager();
var projectcodes = pm.SelectAllProjects();
var projects = new List<Project>();
foreach (var proj in projectcodes)
{
projects.Add(proj as Project);
}
return Json(projects.Where(x => x.CustomerCode == code).ToList());
}
正在从数据库中检索数据,但where子句不会过滤掉等于参数的数据。
答案 0 :(得分:1)
通过执行进行调试,并确保这些项目当前没有CustomerCode
code
。我的问题是#34;是项目代码Project
对象中的项目吗?如果不是,则不能as cast
他们Project
,而是必须new Projects
使用该代码new Project(projectCode)
此外,您上面写的所有内容都可以轻松地重写为一行代码。 (您可能需要在.ToList<Project>()
之前执行Where
,但我不知道您的类型,所以我不会假设)
public ActionResult GetIssueList(string code)
{
return Json(new ProjectManager()
.SelectAllProjects()
.Select(proj => proj as Project)
.Where(proj => proj.CustomerCode == code)
.ToList();
}
编辑:在return语句的上面方法中放置一个断点,如果列表中的项目具有预期的CustomerCode,则在比较发生之前进行检查。
答案 1 :(得分:0)
这里有太多未知数要更准确地回答,但为了更容易逐步调试,我建议你将Where
调用更改为传统循环(并在发现问题后将其更改回来当然):
public ActionResult GetIssueList(string code)
{
IEnumerable<Project> projects =
new ProjectManager()
.SelectAllProjects()
.Cast<Project>();
//this is replacement for Where call.
//Debug breakpoint here step by step and look at the CustomerCode values
//to find out why they are all added.
List<Project> filtered = new List<Project>();
foreach(Project p in projects)
{
if(p.CustomerCode == code)
filtered.Add(p);
}
return Json(filtered);
}