使用LINQ从两个表(join)获取数据,并使用MVC 5将结果返回到View

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LINQ从两个表(join)获取数据,并使用MVC 5将结果返回到View相关的知识,希望对你有一定的参考价值。

我有两个表:INVENTORY和MINMAX,我想用join执行查询,如果在INVENTORY上达到最小数量和最大值,则在View中获取结果

在Controller中我有这个代码:

 public ActionResult DetailsMinMax(string id)
        {
        
  var ListMin = (from i in INVENTORY
                           join m in MINMAX
                           on i.ITEM.Trim() equals m.ITEM.Trim()
                           select new
                           {
                               INVORG = i.INVORG,
                               ITEM = i.ITEM,
                               DESCRIPTION = i.DESCRIPTION,
                               ONHANDQTY = i.ONHANDQTY,
                               MINQTY = m.MINQTY,
                               MAXQTY = m.MAXQTY
                           }).Where(a => a.MINQTY >= a.ONHANDQTY).ToList();

            var ListMAX = (from i in INVENTORY
                           join m in MINMAX
                           on i.ITEM.Trim() equals m.ITEM.Trim()
                           select new
                           {
                               INVORG = i.INVORG,
                               ITEM = i.ITEM,
                               DESCRIPTION = i.DESCRIPTION,
                               ONHANDQTY = i.ONHANDQTY,
                               MINQTY = m.MINQTY,
                               MAXQTY = m.MAXQTY
                           }).Where(a => a.MAXQTY <= a.ONHANDQTY).ToList();
                           
                           return View ();
      
         }
         

模型

  public class MINMAX
    {
        public string MINMAXID { get; set; }
        [Required]
        public string INVORG { get; set; }
        [Required]
        public string ITEM { get; set; }
        [Required]
        public string DESCRIPTION { get; set; }
        public string PRIMARYUOMCODE { get; set; }
        public decimal MINQTY { get; set; }
        public decimal MAXQTY { get; set; }
    }
    
    public class INVENTORY
    {
    public string INVO { get; set; }
    public string INVORG { get; set; }
    public string ITEM { get; set; }
    public string DESCRIPTION { get; set; }
    public decimal ONHANDQTY{ get; set; }
    }

期望的输出:

enter image description here

答案

从你的代码中,你不是很清楚你想要做什么但是作为一个疯狂的猜测我相信你使用Inventory表存储(项目/产品)信息,MinMax表用于存储每个现有项目的附加信息,如(该项目的最小/最大数量)。如果是这种情况,我可以给你以下建议:

您在表中有重复的数据,尝试通过将Inventory表的架构更改为(Id,Description,CurrentQuantity,InfoId)并将MinMax表命名为InventoryInfo或InventoryDe​​tail来设置scheam(Id,ItemId)来解决这个问题。 ,MinQty,MaxQty)。注意:在这种情况下,您将在Inventory和InventoryInfo表之间建立一对一的关系,但这种关系并未得到很好的处理。最好的选择是删除第二个表(MINMAX)并在Inventory表中添加MinQty和MaxQty列。然后您的查询应如下所示:

var result = InventorySet.Where(x => x.CurrentQty == x.MinQty || x.CurrentQty == x.MaxQty).ToList();
return View(result)

PS:我认为这就是你想要做的。如果您还没有解决问题,请告诉我。

以上是关于使用LINQ从两个表(join)获取数据,并使用MVC 5将结果返回到View的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq to sql 从两个表中获取所有数据

从两个表中选择更新 Linq 查询?

Linq,EF Core - 按一个字段分组并使用其他字段从其他表中获取数据列表

这是在 .netCore 项目中使用 LINQ 查询连接两个表的正确方法吗?

如何使用Yii2中的left join从两个表中获取所有列数据

Linq 查询从两个表中获取不同的记录