c# - 使用 LINQ,如何限制根据子表属性检索的行?

标签 c# asp.net sql-server entity-framework linq

我有以下两个类(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/

相关文章:

c# - 使用 Rotativa 从多个 View 生成 pdf?

c# - 如何创建非窗口绑定(bind)的键盘快捷键

c# - 如何动态地将值存储在 ArrayList 中

javascript - 根据请求加载 Google map 标记 HTML

c# - 如何在 PetaPoco 中检索 xml 列

c# - 是否有任何在 Windows 窗体应用程序中以最少设置使用 CefGlue 或 CefSharp 的示例?

c# - Azure Blob 存储保存 Dto

c# - 从 web.config 获取连接字符串以在 EF POCO 中使用?

sql-server - SQL Server CDC - Debezium Kafka 特定日期的快照

c# - Linq 查询未按预期运行