【发布时间】:2020-03-06 16:59:24
【问题描述】:
所以,假设我有一个Contest,它可以有多个ContestCulture。
对于本次比赛,我必须拥有 Documents ,其中有 DocumentType 和 Culture(规则、条款和条件、隐私政策)
对于每个ContestCulture,我必须为每个DocumentType 至少有一个Document,以便Contest 有效。
假设我有一个 Contest 和 2 个 ContestCulture (fr-CA, en-CA)
我必须至少有 6 个 Document 用于那个 Contest
- 文档 1:文化 1、规则
- 文档 2:文化 1、条款和条件
- 文档 3:文化 1、隐私政策
- 文档 4:文化 2、规则
- 文档 5:文化 2、条款和条件
- 文档 6:文化 2、隐私政策
实体如下:
public class Document
{
public DocumentType DocumentType { get; set; }
public int CultureId { get; set; }
public Culture Culture { get; set; }
public int ContestId { get; set; }
public Contest Contest { get; set; }
//Some other properties
//...
}
public class Contest
{
public List<Document> Documents { get; set; }
public List<ContestCulture> ContestCultures { get; set; }
//Some other properties
//...
}
public class ContestCulture
{
public int ContestId { get; set; }
public Contest Contest { get; set; }
public int CultureId { get; set; }
public Culture Culture { get; set; }
//Some other properties
//...
}
public class Culture
{
public string Code { get; set; }
public string Name { get; set; }
}
现在已经设置了上下文..
我有 3 个列表:
-
DocumentType列表(enum值列表) -
ContestCultureID 列表(int列表) -
Documents的Contest列表(Document列表)
如何检查每个DocumentType 是否至少有1 个Document ContestCulture?
我对 LinQ 真的很陌生,所以我尝试了这个:
from cultureId in list_usedCultureIdsForContest
join doc in documents on cultureId equals doc.CultureId into temp1
from t in temp1.DefaultIfEmpty()
select new {cultureId, t};
【问题讨论】:
-
听起来让我很困惑。所以3个列表之间的关系是:1个Contest可以有很多ContestCultures,1个Contest可以有很多Documents。这是正确的吗?并且 1 竞赛仅在所有文档类型存在时才有效。这和文化有什么关系?
-
@Alex-TinLe 你好!你说得对 Contest、ContestCulture 和 Document 之间的关系。当每个 ContestCulture 都存在所有 DocumentType 时,该竞赛是有效的。在我的示例中,CultureId 代表 ContestCulture.Id
-
我将编辑 OP,因为它有点令人困惑。我可能忘记了一些事情。
-
@Alex-TinLe 如您所见,该文档与 ContestCulture 无关,而是与一种文化相关(没有设计它并且现在进行架构更改的方式很晚:/)。所以我必须检查
ContestCulture中使用了哪个Culture作为Contest,然后以某种方式加入所有这些以检查每个ContestCulture的每个DocumentType是否至少有一个Document...