ASP.NET Web API 搜索多个表格
ASP.NET Web API searching multiple tables
我有一个搜索功能,可以在两个相关的 table 和一个不相关的 table 中搜索特定的词。
Owner table 和 Registration table 是相关的,而 Vehicle table 与其他两个 table 没有关系。
我尝试了多种方法来解决这个问题,但没有一种有效。下面是有问题的代码。
到目前为止我尝试的是将三个 table 放在一个 ViewModel 中并在我的控制器搜索方法中调用它。
Owner Table
public int OwnerId {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
Registration Table
public int RegistrationId {get; set;}
public DateTime RegisteredDate {get; set;}
public string RegistrationLocation {get;set;}
public int OwnerId {get;set;}
Vehicle Table
public int VehicleId {get;set;}
public string VehicleName {get;set;}
public DateTime VehicleYear {get;set;}
public string Model {get;set;}
SearchViewModel
public IEnumerable<Owner> Owners {get;set;}
public IEnumerable<Registration> Registrations {get;set;}
public IEnumerable<Vehicle> Vehicles {get;set;}
Controller
[HttpGet]
public SearchViewModel Search(string searchString)
{
SearchViewModel searchVM = new SearchViewModel();
searchVM.Owner = searchVM.Owner.Where(o => o.FirstName.Contains(searchString));
searchVM.Registration = searchVM.Registration.Where(r => r.RegistrationLocation.Contains(searchString));
searchVM.Vehicle = searchVM.Vehicle.Where(v =>
v.Model.Contains(searchString));
return searchVM;
}
我试过的另一种方法是:
[HttpGet]
public IActionResult Search(string searchString)
{
var owner = from owners in _context.Owner select owners;
var registration = from registrations in _context.Registration select
registrations;
var vehicle = from vehicles in _context.Vehicle select vehicles;
owner = owner.Where(o => o.FirstName.Contains(searchString));
registration = registration.Where(r =>
r.RegistrationLocation.Contains(searchString));
vehicle = vehicle.Where(v =>
v.Model.Contains(searchString));
return Ok(); //I'm not sure how to return the three.
}
结合你的两次尝试。在第一次尝试中,您正在构建视图模型,但不查询数据库。在第二次尝试中,您正在查询数据库,但没有构建视图模型。两者都做。
例如:
var searchVM = new SearchViewModel();
searchVM.Owners = _context.Owner.Where(o => o.FirstName.Contains(searchString));
searchVM.Registrations = _context.Registration.Where(r => r.RegistrationLocation.Contains(searchString));
searchVM.Vehicles = _context.Vehicle.Where(v => v.Model.Contains(searchString));
return searchVM;
我有一个搜索功能,可以在两个相关的 table 和一个不相关的 table 中搜索特定的词。 Owner table 和 Registration table 是相关的,而 Vehicle table 与其他两个 table 没有关系。 我尝试了多种方法来解决这个问题,但没有一种有效。下面是有问题的代码。
到目前为止我尝试的是将三个 table 放在一个 ViewModel 中并在我的控制器搜索方法中调用它。
Owner Table
public int OwnerId {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
Registration Table
public int RegistrationId {get; set;}
public DateTime RegisteredDate {get; set;}
public string RegistrationLocation {get;set;}
public int OwnerId {get;set;}
Vehicle Table
public int VehicleId {get;set;}
public string VehicleName {get;set;}
public DateTime VehicleYear {get;set;}
public string Model {get;set;}
SearchViewModel
public IEnumerable<Owner> Owners {get;set;}
public IEnumerable<Registration> Registrations {get;set;}
public IEnumerable<Vehicle> Vehicles {get;set;}
Controller
[HttpGet]
public SearchViewModel Search(string searchString)
{
SearchViewModel searchVM = new SearchViewModel();
searchVM.Owner = searchVM.Owner.Where(o => o.FirstName.Contains(searchString));
searchVM.Registration = searchVM.Registration.Where(r => r.RegistrationLocation.Contains(searchString));
searchVM.Vehicle = searchVM.Vehicle.Where(v =>
v.Model.Contains(searchString));
return searchVM;
}
我试过的另一种方法是:
[HttpGet]
public IActionResult Search(string searchString)
{
var owner = from owners in _context.Owner select owners;
var registration = from registrations in _context.Registration select
registrations;
var vehicle = from vehicles in _context.Vehicle select vehicles;
owner = owner.Where(o => o.FirstName.Contains(searchString));
registration = registration.Where(r =>
r.RegistrationLocation.Contains(searchString));
vehicle = vehicle.Where(v =>
v.Model.Contains(searchString));
return Ok(); //I'm not sure how to return the three.
}
结合你的两次尝试。在第一次尝试中,您正在构建视图模型,但不查询数据库。在第二次尝试中,您正在查询数据库,但没有构建视图模型。两者都做。
例如:
var searchVM = new SearchViewModel();
searchVM.Owners = _context.Owner.Where(o => o.FirstName.Contains(searchString));
searchVM.Registrations = _context.Registration.Where(r => r.RegistrationLocation.Contains(searchString));
searchVM.Vehicles = _context.Vehicle.Where(v => v.Model.Contains(searchString));
return searchVM;