继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%'
)