我有两个对象:Word和WordForm。 它们与 WordId 链接在一起。下面是其中的数据示例:
Word id Word id Wordformid Sourceid
1 1 123 1
1 234 1
1 567 2
1 890 2
2 2 111 1
3 3 113 1
4 3 222 2
我想创建一个 LINQ 查询,它为我提供了所有没有具有特定 SourceID 的相应 WordForm 的单词。换句话说,一个可以给我的查询:
如果 SourceId 选择器为 1,那么它会给我4
如果 SourceId 选择器为 2,那么它会给我2 & 3
这是我到目前为止所拥有的:
var words = db.Words
.Where(w => !db.WordForms.Any(z => z.WordId == w.WordId ))
.ToList();
public class Word
{
public System.Guid WordId { get; set; } // WordId (Primary key)
public string Name { get; set; } // Name (length: 20)
// Reverse navigation
public virtual System.Collections.Generic.ICollection<WordForm> WordForms { get; set; } // WordForm.FK_WordFormWord
}
public class WordForm
{
public System.Guid WordFormId { get; set; } // WordFormId (Primary key)
public System.Guid WordId { get; set; } // WordId
public int SourceId { get; set; } // Source
public string Definition { get; set; } // Definition (length: 500)
// Foreign keys
public virtual Word Word { get; set; } // FK_WordFormWord
}
所有没有具有特定源ID的相应WordForm的单词
假设你有Word w
.以上可以这样翻译:
对应词形:
db.WordForms.Where(wf => wf.WordId == w.WordId)
具有特定源 ID 的 WordForm:
db.WordForms.Where(wf => wf.SourceId == SourceId)
具有特定源 ID 的相应 WordForm:
db.WordForms.Where(wf => wf.WordId == w.WordId && wf.SourceId == SourceId)
没有具有特定源 ID 的相应 WordForm:
!db.WordForms.Where(wf => wf.WordId == w.WordId && wf.SourceId == SourceId).Any()
或者干脆
!db.WordForms.Any(wf => wf.WordId == w.WordId && wf.SourceId == SourceId)
所以整个查询将是:
var words = db.Words
.Where(w => !db.WordForms.Any(wf => wf.WordId == w.WordId && wf.SourceId == SourceId))
.ToList();