我有以下两个类(class):
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
}
我有这段代码,它只返回那些不以 wordForm 形式出现的单词:
var words = db.Words
.Where(w => !db.WordForms.Any(z => z.WordId == w.WordId))
.AsNoTracking()
.ToList();
如何更改此设置,以便检索非 wordForm 且 sourceId 为 2 的单词。
换句话说
如果有单词
house
并且它在 wordForm 中的 SourceId 为 1,那么我想将其包含在单词中如果有一个单词
house
并且它在 wordForm 中的 SourceId 为 2,那么我不想将其包含在单词中
最佳答案
试试这个,如果有效的话。
var words = db.Words
.Where(w => !db.WordForms.Any(z => z.WordId == w.WordId) && db.WordForms.Any(y => y.SourceId == 2))
.AsNoTracking()
.ToList();
P.S我还没有编译和检查!!
关于c# - 使用 LINQ,如何限制根据子表属性检索的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278268/