努力做到这一点。 所以我有一个模型视图,它具有Ienumerable BusinessUnits来绑定视图的ListBox多选,我有Ienumerable selectedBusinessUnit来保存选定的值。 一旦选择了多个值并回发到控制器,我就很难使用linq查询来检查数据库中的值与IEnumberable selectedBusinessUnit。更像是一个SQL" IN"查询。
以下代码
public class ProjectsSearchViewModel
{
public IEnumerable<string> selectedBusinessUnit { get; set; } //Selected Revenue Organization (Business Unit)
[Display(Name = "Business Unit")]
public IEnumerable<SelectListItem> BusinessUnits { get; set; } //populate list of business units from database for the listbox
}
//我的观点
@Html.LabelFor(m => m.BusinessUnits, new { @class = "col-md-4 control-label" })
@Html.ListBoxFor(m => m.selectedBusinessUnit, Model.BusinessUnits, new { @class = "form-control", type = "dropdownlist", size = 5 })
//控制器
if (projectsSearchViewModel.selectedBusinessUnit != null)
{
result = result.Where(x => x.Project.Revenue_Organization.Contains(projectsSearchViewModel.selectedBusinessUnit));}
它表示无法将IEnumerable转换为字符串
有没有人成功地做过这样的事情。如果是这样,他们会热衷于知道如何。
更多代码
var results = (from project in db.Projects
join emp in db.Employees
on project.Project_Manager equals emp.Employee_ID
select new ProjectsList
{
Project = project,
Employee = emp
});
Revenue_organization是项目表(项目对象)中的一个列(如果您愿意,可以是属性),以防任何人想知道。 最终结果我正在寻找获得revenue_organization IN 所选商家单位列表的项目列表
答案 0 :(得分:2)
假设Project.Revenue_Organization
是一个字符串,您需要撤消该语句。该集合应该包含字符串,但是当你编写它时,它会检查字符串是否包含集合(这没有意义)。
result = result.Where(x => projectsSearchViewModel.selectedBusinessUnit.Contains(x.Project.Revenue_Organization));}
答案 1 :(得分:1)
您在错误的对象上使用Contains。反过来就是这样:
result = result.Where(x =>
projectsSearchViewModel.selectedBusinessUnit.Contains(
x.Project.Revenue_Organization));
我有这样的假设:
projectsSearchViewModel.selectedBusinessUnit是一个IEnumerable。 x.Project.Revenue_Organization是一个字符串值(db中您要进行的列#34; IN&#34;查询)。