我有两个模型,分类和子类别,一对多关系。加入问题 - 三张表
然后我有一个名为Notice的模型,它与子类别(SubcategoryId为FK)有一对一的关系。
用户添加他们想监视的子类别。 当子类别内发生某些事情时,他们会注意到它们。
现在我试图让用户得到哪些subcats被监视的概述,这样打印出来的信息:
var SubcatsAndCheckedNotices =
from subcat in db.Subcategories
join notice in db.Notices.Where(x=>x.CompanyId == company.CompanyId) on subcat.SubcategoryId equals notice.SubcategoryId into prodGroup
from item in prodGroup.DefaultIfEmpty()
select new CheckedNoticesViewModel() {CategoryId =subcat.CategoryId, Category = subcat.Category, Subcategory = subcat, Checked = (item.SubcategoryId == null ? false : true) };
:
(icon) Category Y
Subcategory - monitored
Subcategory - monitored
Subcategory - not monitored
(icon) Category X
Subcategory - not monitored
Subcategory - monitored
Subcategory - not monitored
目前我已经做这样解决了它
这几乎可行,问题是我需要按照上面的说明打印出来,因此需要做出不同的选择(对于类别),并且通过这样做,我失去了访问其他Category属性的权限,例如我需要的Icon属性。
我被卡住了,知道有更好的方法来做到这一点,但我无法弄清楚。
这里是我的模型在全:
public class Category
{
public int CategoryId { get; set; }
public string Icon { get; set; }
public string Title { get; set; }
public ICollection<Subcategory> Subcategories { get; set; }
}
public class Subcategory
{
public int SubcategoryId { get; set; }
public string Title { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class Notice
{
public int NoticeId { get; set; }
public int SubcategoryId { get; set; }
public virtual Subcategory Subcategory { get; set; }
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
}
有什么建议?
你不能只使用类别的导航属性,然后打印类别,然后打印它的子类型?或者就查询结果使用GroupBy按类别分组? –
我认为你错过了这一点,我需要为输出(针对每个子类别)合并用户特定的通知。 – Josef
那么你只是想显示子类别中有“公司”添加的通知的类别和子类别?如果是的话,你可以像我建议的那样使用GroupBy而不是Distinct? –