我很努力地理解LINQ語法以及如何將它與數據庫中的多對多關係一起使用。在我的示例項目中,我正在模擬汽車和維護,您可以對汽車進行建模。所以,我有3個表:在C#中使用LINQ返回多對多結果asp.net
- 汽車(約合用戶添加一個車廂信息),
- 服務(參考信息只)
- CarServices(商店什麼服務已經在汽車上完成)
在網站上,我顯示了所有這3個表中的信息,所以我創建了一個視圖模型CarsIndexViewModel來保存Car及其關聯的CarServices。
public class Car
{
public int Id { get; set; }
[Required]
[StringLength(40)]
public string Name { get; set; }
[Required]
[Range(1900, 2018)]
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Color { get; set; }
public int Mileage { get; set; }
public virtual ICollection<CarService> CarServices { get; set; }
}
public class Service
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<CarService> CarServices { get; set; }
}
public class CarService
{
public int Id { get; set; }
public int CarId { get; set; }
[Required]
[Display(Name = "Service")]
public int ServiceId { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
[Display(Name = "Date of Service")]
public DateTime ServiceDate { get; set; }
[Column(TypeName = "Money")]
public decimal? Cost { get; set; }
public bool HasReceipt { get; set; }
[Required]
[Display(Name = "Mileage At Time of Service")]
public int Mileage { get; set; }
public virtual Car Car { get; set; }
public virtual Service Service { get; set; }
}
和視圖模型:
public class CarsIndexViewModel
{
public Car Car { get; set; }
public IEnumerable<CarService> Services { get; set; }
}
我已經能夠在我的控制器使用此代碼返回服務所有及其信息:
var query = (
from car in _context.Cars
select new CarsIndexViewModel()
{
Car = car,
Services = car.CarServices
}).ToList();
return View(query);
我無法弄清楚的是如何僅返回符合特定標準的CarServices。例如,如果我只想從最近的日期顯示CarServices,該怎麼辦?
感謝您的回覆!我想要的與第二個示例類似,但我希望recentThreshold等於CarServices中的最新日期。例如,如果汽車最近在2月2日在商店內,並且進行了換油和輪轉,我只想從CarServices中返回這兩行。 –
我明白了,讓我給出一些想法... –
檢查我更新的答案。我添加了一個選項,希望能讓你得到你所需要的。我假設你的'car'對象有某種標識符?我正在使用這個假設來爲每輛車的最新服務日期建立查詢表。我用'id'。如果它被命名爲別的東西,你將不得不使用它。如果您對此有任何疑問,請告知我們。 –