繼Contoso大學教程搜索,我有哪些鏈接到地址類Person類給予一個一對多的關係MVC /實體架構核心,通過鏈接模型的數據
public class Person{
public string FullName { get; set; }
public virtual ICollection<Address> AddressIDs { get; set; }
}
public class Address {
public string Postcode { get; set; }
[ForeignKey("PersonID")]
[Display(Name = "Person ID")]
public int? PersonID { get; set; }
public virtual Person objPerson { get; set; }
}
所以我的觀點顯示了所有這樣的人的地址,這一切都正常工作,對於一個人我得到他們所有地址的列表。
@foreach (var item in Model.AddressIDs) {
@Html.DisplayFor(modelItem => item.Address1)
@Html.DisplayFor(modelItem => item.Address2)
@Html.DisplayFor(modelItem => item.Postcode)
在控制器我用
var persons = from ps in _context.FullPerson
select ps;
persons = persons.Where(ps => ps.objPerson.Forename.Contains("Smith"));
從數據庫帶回所有的 「史密斯」 S。我怎樣才能擴展這個,這樣我就可以只搜索那些帶有某個郵編的記錄?
persons = persons.Where(ps => ps.objPerson.Postcode.Contains("SW9"));.
這不起作用,因爲郵政編碼是在連接的地址模式,對事不對人模型
persons = persons.Where(ps => ps.objPerson.AddressIDs.something.Contains("SW9"));
這並不是因爲什麼工作的對象引用(我認爲),如添加,總計<>,所有<>等
我是否應該使用LINQ將這兩者連接在一起(即使我認爲它們已經通過EF連接在一起)? 感謝
編輯 使用回答以下我得到的郵政編碼我在尋找
IQueryable<int> PersonIDsWithThisPostcode = _context.Addresses.Where(pst => pst.Postcode.Contains(p)).Select(b => b.PersonID);
的PersonIDs列表現在我需要繼續沿着這條做一個SQL命令
persons = persons.Where(ps => ps.HumanID.Contains(PersonIDsWithThisPostcode));
這不起作用,因爲 「詮釋不包含一個定義包含」
實際上,這是對數據的SQL我試圖找回
SELECT * FROM person
WHERE personid IN(
SELECT personid FROM address
WHERE postcode LIKE 'sw%'
)