EF LINQ-返回包含整个集合的实体

宝格丽男孩

我正在尝试对以下LINQ查询进行故障排除:

public JsonResult SearchNodesByTags(string[] tags)
{    

    var nodes = _DbContext.Nodes.
            Where(n => n.Tags.All(t => tags.Contains(t.DisplayName)))
            .Select(n => new {n.NodeNativeId, n.NodeName, n.NodeClass.ClassName})
            .ToList();

    return Json(nodes);
}

查询返回的是一个与标签不相关的单个节点。我想要它做的是返回具有所有标签的所有节点。

j
  .Where(n => n.Tags.All(t => tags.Contains(t.DisplayName)))

当前的构造方式,您只会以Nodes结尾,其中的每个标签在白名单Node.Tags都有一个名称tags,其中包括Node没有标签的s。


您可能想从这里对子集使用答案

_DbContext.Nodes
    .Where(n => !tags.Except(n.Tags.Select(t => t.DisplayName)).Any()) 
    .Select(...
  • set1.Except(set2)包含set1不存在的元素set2
  • !set1.Except(set2).Any() == true如果set2包括的每个元素set1

编辑

在评论中指出,使用Except可能会生成有问题的查询,因此我在想另一种选择是从数据库中获取超集,并进一步过滤应用程序内的对象:

_DbContext.Nodes
    // filter nodes with any of the input tags
    .Where(n => n.Tags.Any(t => tags.Contains(t.DisplayName)))

    // select the information required
    .Select(n => new {
        n.NodeNativeId, 
        n.NodeName, 
        ClassName = n.NodeClass.ClassName,
        TagNames = n.Tags.Select(t => t.DisplayName) })

    // materialize super set with database
    .ToList()

    // filter so that only nodes with all tags remain
    .Where(n => !tags.Except(n.TagNames).Any())

    // produce result in anonymous class
    .Select(n => new { n.NodeNativeId, n.NodeName, n.ClassName })
    .ToList();

编辑2

我刚刚在这里看到了另一个可能对您有用的标签,但是它要求它Tag.DisplayName唯一的,因为如果您有多个具有相同标签的标签,可能会失败DisplayName

_dbContext.Nodes
     .Where(n => n.Tags.Count(t => tags.Contains(t.DisplayName)) == tags.Count)
     .Select(...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Linq返回EF6中的相关实体

来自分类Dev

Linq to EF:返回 IQueryable 对象的混淆

来自分类Dev

ef核心返回只是包含的实体

来自分类Dev

在 WPF App 中使用 LINQ 返回基于相关表中 FK 的 EF 实体列表

来自分类Dev

如何合并.Max()以查询LINQ to EF中的空集合?

来自分类Dev

如何在Linq和EF中订购嵌套集合

来自分类Dev

SQL-Select转换为EF linq转换为实体

来自分类Dev

EF和Linq除外

来自分类Dev

LINQ to EF子查询

来自分类Dev

在EF Linq to Entities中使用动态linq

来自分类Dev

EF LINQ ToList非常慢

来自分类Dev

EF和Linq中的术语

来自分类Dev

EF LINQ翻译:复杂查询

来自分类Dev

EF Linq Select陈述式

来自分类Dev

加快LINQ to EF查询的速度

来自分类Dev

EF7 / Linq-包含嵌套对象的“包含”查询引发异常

来自分类Dev

如何在LINQ Where子句中查询EF6集合属性?

来自分类Dev

Linq到实体还是SQL Server?无法获得我需要的结果。MVC EF

来自分类Dev

如何使用 EF 原始 SQL 查询和/或 LinQ 填充实体模型?

来自分类Dev

MVC5 / EF / LINQ-多次选择计数查询返回到视图,最佳实践

来自分类Dev

如何在MVC / EF / LINQ中执行存储过程并获取返回结果

来自分类Dev

Linq除了返回整个表

来自分类Dev

Linq除了返回整个表

来自分类Dev

EF Core 2.1 Linq查询到EF Core 3.0

来自分类Dev

将SQL转换为EF Linq

来自分类Dev

EF Linq按ICollection对象分组

来自分类Dev

使用LINQ to EF确定重复数据

来自分类Dev

EF6 LINQ铸柱

来自分类Dev

LINQ-EF的多个函数参数