{高级},我试图回发一个ASP.NET MVC视图,它有多个用户输入' "搜索条件"并使用这种不同的搜索条件"作为Controller动作方法中的参数,它构造一个视图模型,并通过最终传递用户输入来获取视图模型方法的结果。作为该方法的参数{低级} .FindAll()
。需要用户能够使用一个或多个或所有输入作为其搜索条件。例如:用户想要搜索有" John"作为[CustFName]。另一个例子:用户想要搜索同时拥有" John"作为[CustFName]和" Holmes"作为[CustLName]。
public class SearchTitleViewModel
{
private readonly ApplicationDbContext _db = new ApplicationDbContext();
public SearchTitleViewModel()
{
var tits = _db.Titles.ToList();
}
public Title Title { get; set; }
public List<Title> Titles { get; set; }
public SearchTitleViewModel GetTitlesWithSearchCriteria(string office, bool? mv = null, int id = -1, string custFName = null, string custLName = null, string vin = null)
{
SearchTitleViewModel searchtitlevm = new SearchTitleViewModel();
if (id > -1)
{
searchtitlevm.Title = _db.Titles.Find(id);
searchtitlevm.Titles.Add(searchtitlevm.Title);
return searchtitlevm;
}
searchtitlevm.Titles.AddRange(
Titles.FindAll(
tit => tit.CustFName == custFName && // want to make "tit.CustFName == custFName" a variable
tit.CustLName == custLName &&// want to make "tit.CustFName == custFName" a variable
tit.InitialLocation == office
)
);
return searchtitlevm;
}
}
最终我想将多个lambda表达式传递给.FindAll()
作为变量,这些变量在运行时声明为FindAll(Title tit, param1 custFNameExpression, param2 custLNameExpression, ...)
,但未能找到任何示例来执行此类操作。我确实找到了创建delegate[]
的示例,但仍未解决添加表达式的问题,具体取决于用户是否从视图中提供了表达式。
我是否认为这一切都错了?我的意思是有更简单的方法吗?
答案 0 :(得分:0)
我放弃了尝试使.FindAll()为我需要的东西工作。我使用.SqlQuery()代替:
public class SearchTitleViewModel
{
private readonly ApplicationDbContext _db = new ApplicationDbContext();
public SearchTitleViewModel()
{
Title = new Title()
{
NtyId = 1//for testing REMOVE
};
Titles = new List<Title>();
}
public Title Title { get; set; }
public List<Title> Titles { get; set; }
public SearchTitleViewModel GetTitlesWithSearchCriteria(SearchTitleViewModel vm)
{
var searchtitlevm = new SearchTitleViewModel();
if (vm.Title.TitleNum != null)
{
searchtitlevm.Title = _db.Titles.Find(vm.Title.TitleNum);
if (searchtitlevm.Title != null && searchtitlevm.Title.NtyId != vm.Title.NtyId)
{
return searchtitlevm;
}
searchtitlevm.Titles.Add(searchtitlevm.Title);
return searchtitlevm;
}
var titssql = "SELECT * FROM Titles WHERE";
if (vm.Title.Vin != null) { titssql += $" Vin = \'{vm.Title.Vin}\' AND "; }
if (vm.Title.CustLName != null) { titssql += $" CustLName = \'{vm.Title.CustLName}\' AND "; }
if (vm.Title.CustFName != null) { titssql += $" CustFName = \'{vm.Title.CustFName}\' AND "; }
titssql += $" NtyId = \'{vm.Title.NtytyId}\'";
searchtitlevm.Titles = _db.Titles.SqlQuery(titssql).ToList();
return searchtitlevm;
}
}