首页 > 解决方案 > 在 linq 中添加带有计数功能的额外列以进行查询?

问题描述

我正在开发一个 Asp.net Core 项目并使用 CodeFirst 并使用这样的 sql 语法进行查询

  SELECT PartID, PartName, PartLevel,
       (SELECT   COUNT(ID) AS Expr1
       FROM   dbo.systemparts
       WHERE(MSys.PartID = PartLevel)) AS ChildCount
  FROM dbo.systemparts AS MSys

样本输出

示例输出 sql 语句

我的模特

public class SystemPart
{
    [Key]
    public int PartID { get; set; }

    public string PartName { get; set; }

    public int PartLevel { get; set; }
}

控制器

public class HomeController : Controller
{

    private readonly ApplicationDbContext _context;

    public HomeController(ApplicationDbContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        return View();
    }
}

现在,我想在 linq 中将其更改为在索引操作中查询字符串或 lambda 表达式。但我无法处理ChildCount领域。我该怎么做?

标签: c#entity-frameworkasp.net-core

解决方案


您可以尝试下面的 LINQ 查询,它将返回antonymous类型的集合。

context.systemparts.Select(p=> new {
         PartId = p.Partid,
         PartName = p.PartName,
         PartLevel = p.PartLevel,
         ChildCount = context.systemparts.Where(q=>q.PartLevel = p.Partid).Count()
});

如果您的视图模型包含 ChildCount 的属性,那么您可以在 Select 中映射该模型,如下所示 -

context.systemparts.Select(p=> new ViewModelName {
             PartId = p.Partid,
             PartName = p.PartName,
             PartLevel = p.PartLevel,
             ChildCount = context.systemparts.Where(q=>q.PartLevel = p.Partid).Count()
    });

推荐阅读