【问题标题】:Parent navigation property is `null` when selecting child object选择子对象时,父导航属性为“null”
【发布时间】:2014-09-17 20:08:52
【问题描述】:

我有两个类参与父子关系。父类为Country,子类为City

public partial class Country
{
    public Country()
    {
        this.Cities = new List<City>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string AlphaCodeTwo { get; set; }
    public string AlphaCodeThree { get; set; }
    public Nullable<int> NumericCode { get; set; }
    public string Capital { get; set; }
    public string Nationality { get; set; }
    public Nullable<decimal> CapitalArea { get; set; }
    public Nullable<decimal> CapitalPopulation { get; set; }
    public string Image { get; set; }
    public virtual List<City> Cities { get; set; }
}

public partial class City
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public Nullable<int> NumericCode { get; set; }
    public virtual Country Country { get; set; }
}

当我使用以下 LINQ 查询选择 City 对象时,父类的导航属性是 null

private List<Country> _Country;
var City = _Country.SelectMany(c => c.Cities).OrderBy(ci => ci.Name).ToList();

我得到所有孩子,但没有父母数据。

【问题讨论】:

  • 如何将城市添加到国家/地区?你确定你设置了城市的国家属性
  • you linq 正在 _Country 列表中选择所有国家/地区所有城市的平面列表,当您说 Parent data I am unsure what you mean,您的意思是每个城市对象上的虚拟 Country 属性是空?
  • 我在一个文件中有 json 数据,这个对象现在有所有数据,所以我想在他的导航属性中获取所有包含国家的城市对象
  • 你想要 .Include() 父母。 LINQ 不会自动加载相关实体,因为这可能会破坏很多东西。见msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx
  • @Pharabus yes virtual Country Property is null in city Object

标签: c# linq linq-to-objects


【解决方案1】:

如果您使用的是实体框架,则可以在加载对象时使用.Include() 来获取导航属性数据。请注意,它往往会产生一些非常粗糙的查询。

var city = (
    from c in db.Cities.Include(c => c.Country)
    where c.CountryId == CountryId
    orderby c.Name
    select c
).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2021-10-20
    • 2022-11-07
    • 2013-07-11
    相关资源
    最近更新 更多