如何选择每个项目与列表中所有项目之间存在引用的项目?

时间:2015-06-15 16:53:30

标签: c# linq

我有一个名为Keywords的对象列表,每个对象都有一个Id。

在我的数据库中,我有一张Forms表和一张KeywordReferences表。

每个KeywordReference都有一个FormId和一个KeywordId

我需要做的是创建一个查询,以获取Forms所有KeywordReference,其中Id所有之间存在Keywords原始列表中的Forms

所以基本上我有一些Form: Name: Test1 Id: 1 Form: Name: Test2 Id: 2 喜欢:

KeywordReferences

然后是几个KeywordReference: FormId: 1 KeywordId: 1 KeywordReference: FormId: 1 KeywordId: 2 KeywordReference: FormId: 2 KeywordId: 2

Keywords

然后我有一个Keyword: Name: Primary Id: 1 Keyword: Name: Secondary Id: 2 列表:

Test1

查询应返回KeywordReference,因为列表中的所有Test1项都存在KeywordTest2

它不应该返回Keywords,因为该表单只匹配 var forms = from form in db.Forms join reference in db.KeywordReferences on form.Id equals reference.FormId join filter in filters on reference.DepartmentKeywordId equals filter.Id reference in the filter select form; 中的一个项目。

我该如何撰写这样的查询?

编辑这是一个查询示例,它可以获取列表中的关键字与给定表单之间发生任何匹配的所有表单,但我需要编写一个查询所有匹配的位置:

refund

1 个答案:

答案 0 :(得分:3)

您需要所有关键字,因此请测试keywords.All

在所有测试中,您需要有匹配的相关关键字参考,因此请测试keywordReferences.Any

from f in forms
where keywords.All(
  kw => keywordReferences.Any(
    kr => kr.KeywordId == kw.Id && kr.FormId == f.Id))
select f;