不成功的Linq查询检索复合密钥表的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不成功的Linq查询检索复合密钥表的数据相关的知识,希望对你有一定的参考价值。

您好我想写一个linq查询来检索由于多对多关系而生成的复合表的所有数据。

这是我在控制器中的查询

 public ActionResult Index()
    {
        var act = (from i in _context.act
                   from j in _context.mvz
                   where i.Id == j.Id
                   select i).ToList();


        var mvz = _context.mvz.ToList();
        var vm = new AAMMViewModel()
        {
            actz = act
            mvz = mvz
        };
        if (vm == null)
        {
            return Content("No items found in database");
        }
        return View(vm);
    }

这是视图模型

  public class AAMMViewModel
{
    public List<Actors> actz { get; set; }
    public List<Movies> mvz { get; set; }
    public AAMMViewModel()
    {
        actz = new List<Actors>();
        mvz = new List<Movies>();
    }
}

它没有给出期望的结果,我知道我的Linq查询的逻辑有问题。如果有人在这方面有专业知识,请指导我。

答案

你可以这样做:

var act = 
    (from i in _context.act
    where i.Id.SelectMany(id => _context.mvz.Contains(id.Id))
    select i).ToList();
另一答案

你确定演员和电影的ID是一样的吗?如果是,请执行连接并使用正确的属性名称。你在你的linq中使用act代替actz

public class AAMMViewModel
{
    public List<Actors> actz { get; set; }
    public List<Movies> mvz { get; set; }
    public AAMMViewModel()
    {
        actz = new List<Actors>();
        mvz = new List<Movies>();
    }
}

var act = (from i in _context.actz
                   join j in _context.mvz ON i.Id == j.Id
                   select i).ToList();

以上是关于不成功的Linq查询检索复合密钥表的数据的主要内容,如果未能解决你的问题,请参考以下文章

在 PDI 中检索事实表的技术密钥

联合运营商的Linq查询返回错误

Linq查询连接guid与varchar字段

EF6 Linq 查询。仅包括返回子表的第一个条目

从数据库成功检索数据后,医疗 ID 片段未更新

使用 LINQ 从多个表中检索数据