我正在使用Entity Framework进行数据访问和操作。我有以下课程:
public class ProductCategory
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MinLength(5)]
[MaxLength(45)]
public string Name { get; set; }
[Column("ParentId", TypeName = "int")]
public int? ProductCategoryId { get; set; }
public virtual ProductCategory Parent { get; set; }
public ICollection<ProductCategory> SubCategories { get; set; }
}
现在我正在使用LINQ来查询所有类别的列表,包括相关的子类别(使用ParentId列),如下所示:
public async Task<IQueryable<ProductCategory>> GetAll()
{
return await Task.Run(() => {
return _db.ProductCategories.AsQueryable();
});
}
当我运行此代码时,我得到以下结果:
[
{
"Id": 1,
"Name": "Computers & Software",
"Parent": null,
"SubCategories": [
{
"Id": 2,
"Name": "Tablets & E-Readers",
"SubCategories": [
{
"Id": 8,
"Name": "Apple iPad",
"SubCategories": []
},
{
"Id": 9,
"Name": "Samsung",
"SubCategories": []
},
{
"Id": 10,
"Name": "Other makes",
"SubCategories": []
}
]
}
]
},
{
"Id": 2,
"Name": "Tablets & E-Readers",
"Parent": {
"Id": 1,
"Name": "Computers & Software",
"Parent": null
},
"SubCategories": [...]
}
]
现在,问题在于第二个对象的名称为&#34;平板电脑&amp; E-读者&#34;已经存在于&#34; SubCategories&#34;的数组中。在数组的第一个对象中。我想不看到第二个对象(DISTINCT),但无法使其正常工作。有谁知道如何解决这个问题?
答案 0 :(得分:0)
我认为您的数据存在问题。子类别(平板电脑和电子书阅读器)不应具有 null 父级,就像现在的数据一样。 子类别表示有父级。 如果只想要父类别,您可以尝试这样的事情:
_db.ProductCategories.Where(cat=>cat.Parent == null).AsQueryable();
可能你会得到你想要的东西。它不会在主列表中选择子类别。
答案 1 :(得分:0)