2014-02-19 77 views
0

在我的控制器中遇到此表达式的问题。我正在开发一个MVC 4项目,并且我还有一些审计记录,以及每个用户已经过滤的应用程序列表,以及每个应用程序在他们的审计历史记录中的列表。我使用下拉列表向审计日志添加筛选,该列表使用ajax调用方法,该方法使用下拉列表中选定项的appid针对审计记录重新运行审计日志,并仅返回包含匹配的appid的审计记录。有一个表达式的问题,让它过滤虽然。以下是我现在所拥有的:Lambda隐式转换的麻烦?

的方法我使用来实现:

[HttpPost] 
    public ActionResult GetRows(String username, int page, int? appId) 
    { 

     User user = UserManager.GetUser(username); 
     var filteredApps = UserManager.GetUserAppListFromAuditRecord(user); 
     List<ApplicationListView> appList = filteredApps.Select(Mapper.DynamicMap<ApplicationListView>).ToList(); 
     List<SelectListItem> appsList = appList.Select(appItem => new SelectListItem 
     { 
      Text = appItem.Name, 
      Value = appItem.ID.ToString() 
     }).ToList(); 
     ViewData["UserAppList"] = appsList; 
     SearchInfo searchInfo = new SearchInfo { UserName = username }; 
     var auditRecord = _userHelper.GetAuditInfo(searchInfo, page); 
     **var filteredRows = auditRecord.AuditRecords.Where(a => a.ApplicationID = appList.Select(t => t.ID).ToList();** 
     return PartialView(auditRecord); 

    } 

最佳地告诉你,每个用户的APPLIST的过滤在后端完成时调用数据库被制成。这就是为什么它被映射到视图模型,然后塞入选择列表。我遇到的部分是“filteredRows”变量。我试图将auditrecords与选择列表中的appid进行比较并返回过滤结果。谢谢!

回答

1

如果我的理解是正确的,你需要a.ApplicationID能跻身appList可以使用Any此:

var filteredRows = auditRecord.AuditRecords.Where(a => appList.Any(t => t.ID == a.ApplicationID)).ToList(); 
+0

我甚至没有想到使用“任意”,向你表示感谢。只要SO让我这么做,将其标记为正确。再一次,谢谢你! – Skrubb