如何使用LINQ查询没有匹配兄弟的实体?

时间:2014-06-10 15:11:30

标签: c# linq entity-framework

我有以下两个实体......

class Citation
{
  public int CitationId { get; set; }
  public string Identifier { get; set; }
}

class CitationIdentifier
{
  public int CitationIdentifierId { get; set; }
  public string Identifier { get; set; }
}

我正在尝试查询Citation属性与Identifier属性中的任何一个都不匹配的所有CitationIdentifier.Identifier条记录。所以,如果我的Citation Identifier属性包含“foo”,但没有CitationIdentifier条记录,其中Identifier属性包含“foo”,那么我就是我想要检索Citation

我正在使用IDbSet<Citation>

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

也许是一个except子句?选择除共享标识符的所有内容之外的所有内容:

(from citation in Citation select citation)
.Except(
from c in Citation
join ci in CitationIdentifier on c.Identifier equals ci.Identifier
select c);

答案 1 :(得分:1)

你可以尝试这个:

var result = citations.Where(x=>!citationIdentifiers.Any(y=>y.Identifier==x.Identifier));

我认为citationscitationIdentifiers是分别包含所有引文和引文标识符的集合。

使用Any扩展方法,您尝试检查是否存在任何引用标识符,其标识符值等于当前引文记录的标识符值。如果是这样,那么这个引用就不会包含在结果中,因为我们采取了

的否定
citationIdentifiers.Any(y=>y.Identifier==x.Identifier)

在我们的Where扩展方法中。