首页 > 解决方案 > 如何根据另一个表的另一行中的条件选择表中的一行?

问题描述

我只想显示一个表中满足另一个表中特定条件的行。上的示例controller

        using(inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
        {
            ProductandBodViewModel finalitem = new ProductandBodViewModel();

            var m_List = dc.showcase.Where(x => x.prod_on_showcase > 0).ToList();
        }

使用上面的代码,可以只显示满足条件的项目,prod_on_showcase > 0. 这ProductandBodViewModel是我创建的模型,用于在同一视图上显示两个模型。

ProductandBodViewModel型号:

public class ProductandBodViewModel
{
    public List<inventory> inventory { get; set; }

    public List<showcase> showcase { get; set; }
}

根据这个条件 ( prod_on_showcase > 0) 我想显示与表格相关的其他信息showcase

showcase桌子型号:

public class showcaseViewModel
{
    public int id_inventory { get; set; }
    
    public int prod_on_showcase { get; set; }
}

inventory桌子型号:

public partial class inventory
{
    public int id_inventory { get; set; }
    public Nullable<int> prod_on_inventory { get; set; }
    public string prod_code { get; set; }
}

表之间的关系是id_inventory字段。

在这种情况下,showcase表格显示的项目是 3,因此inventory表格也必须显示 3 个项目。使用下面的代码可以显示showcase满足条件的表的信息,但使用另一个表 ( inventory) 仅显示根据条件找到的第一个元素prod_on_showcase > 0

using(inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
{
    ProductandBodViewModel finalitem = new ProductandBodViewModel();

    var m_List = dc.showcase.Where(x => x.prod_on_showcase > 0).ToList();

    var m_Each = dc.showcase.Where(e => e.prod_on_showcase > 0).Count();

    for(int i = 0; i < m_Each; i++)
    {
        var prodEach = dc.inventory.Where(x => x.prod_on_showcase > 0).FirstOrDefault();

        var b = dc.inventory.Where(a => a.id_inventory == prodEach.id_inventory).ToList();

        finalitem.bod = b;
    }

    finalitem.showcase = m_List;

    return View(finalitem);                
 }

标签: c#asp.netasp.net-mvcrazor

解决方案


您要求var prodEach = dc.inventory.Where(x => x.prod_on_showcase > 0).FirstOrDefault();始终返回数组中的第一个(或默认)元素。

Linq'sSelectMany对于您正在尝试做的事情很有用。

using(inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
{
    ProductandBodViewModel finalitem = new ProductandBodViewModel();

    var m_List = dc.showcase.Where(x => x. > 0).ToList();

    var m_List = showcase.Where(x => x.prod_on_showcase > 0).ToList();

    finalitem.showcase = m_List.SelectMany(prodEach
        => dc.inventory.Where(a => a.id_inventory == prodEach.id_inventory)

    finalitem.showcase = m_List;

    return View(finalitem);                
 }```

推荐阅读