[英]Entity Framework and Web API/REST - Joining to list properties
我已經使用EF(代碼優先,.NET Framework 4.5)創建了一個Web API應用,並且我有一個可以在其他兩個類(例如人和汽車)之間鏈接的類,以便跟蹤汽車的特定年份為那個人。 這樣,“汽車”表中的每個“品牌/型號”只需要一個條目,一個人可以擁有“汽車”的任何“品牌/型號”的多個實例。 看起來像這樣:
public class Person
{
public int Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public List<PersonCar> Cars {get; set;}
}
public class PersonCar
{
public int Id {get; set;}
public Car {get; set;}
public int Year {get; set;}
}
public class Car
{
public int Id {get; set}
public string Make {get; set;}
public string Model {get; set;}
}
我需要一個控制器,該控制器返回所有驅動特定汽車品牌/型號的人員,但是我無法創建適當的查詢來加入這些表。 這是我嘗試過的示例:
public IQueryable<Person> GetPersonsByCarId(int carId)
{
IQueryable<Person> Persons = db.Persons.Include(
p => p.Cars.Where(
c => c.Car.Id == carId)
.Select(c => c.Car));
return Persons;
}
我已經嘗試通過更改Where和Select語句的順序來對此進行多種變體,但始終會得到一個包含此消息的異常:
The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.
我一直找不到如何正確連接這些表/對象以返回人員列表的示例。 誰能告訴我正確的結構方式?
謝謝!
使用Any()
擴展名,它返回可以在Where
子句中使用的boolean
IQueryable<Person> Persons = db.Persons
// you can also do .Include("Car") here if you need Car property eager-loaded
.Where(p => p.Cars.Any(c => c.Car.Id == carId));
return Persons;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.