簡體   English   中英

實體框架和Web API / REST-加入列表屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM