【发布时间】:2016-02-21 17:58:50
【问题描述】:
我正在尝试进行一项查询以访问数据库以获取 5 个不同的表,以便在一个视图模型中发送到我的视图。这是我的数据类。
public partial class Table_Parts_Warehouse
{
public int CQPN { get; set; }
public int CATEGORY { get; set; }
public int SUBCATEGORY { get; set; }
public string DESCRIPTION { get; set; }
public int QTY { get; set; }
public Nullable<int> MINSTK { get; set; }
public Nullable<int> MAXSTK { get; set; }
public Nullable<decimal> COST { get; set; }
}
public partial class Table_Parts_Order
{
public int ORDERID { get; set; }
public System.DateTime DATE { get; set; }
public bool STATUS { get; set; }
public string PONO { get; set; }
public string INVOICENO { get; set; }
public string QUOTENO { get; set; }
public int COMPANYID { get; set; }
public Nullable<decimal> COST { get; set; }
}
public partial class Table_Parts_OrderPart
{
public int ORDERPARTID { get; set; }
public int ORDERID { get; set; }
public int CQPN { get; set; }
public int ORDERQTY { get; set; }
public Nullable<int> RECVQTY { get; set; }
public string PARTNO { get; set; }
}
public partial class Table_Parts_Vendor
{
public int COMPANYID { get; set; }
public string PHONENO { get; set; }
public string COMPANYNAME { get; set; }
}
public partial class Table_Parts_Part
{
public int PARTID { get; set; }
public int CQPN { get; set; }
public string PARTNO { get; set; }
public decimal COST { get; set; }
public int COMPANYID { get; set; }
public int QTY { get; set; }
}
我的视图模型类在这里,所有这些类,订单类是单个订单条目,但其余都是该订单的关联零件和数据的列表。
public class OrderDetailsViewModel
{
public Table_Parts_Order tb_parts_order { get; set; }
public List<Table_Parts_OrderPart> tb_parts_orderpart { get; set; }
public List<Table_Parts_Vendor> tb_parts_vendor { get; set; }
public List<Table_Parts_Warehouse> tb_parts_warehouse { get; set; }
public List<Table_Parts_Part> tb_parts_part { get; set; }
}
在我的视图控制器中,我尝试对所有这些进行 1 次查询,然后一次性选择它们。我可以使用相同的查询单独执行此操作,然后选择表,然后选择 .ToList() ,它工作正常,但我访问数据库 5 次而不是一次。在此查询中选择列表时需要帮助。
public ActionResult PartsOrderDetails(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
OrderDetailsViewModel vm = new OrderDetailsViewModel();
vm = (from a in db.Table_Parts_Warehouse
join b in db.Table_Parts_OrderPart
on a.CQPN equals b.CQPN
join c in db.Table_Parts_Part
on b.PARTNO equals c.PARTNO
join d in db.Table_Parts_Vendor
on c.COMPANYID equals d.COMPANYID
join e in db.Table_Parts_Order
on b.ORDERID equals e.ORDERID
orderby a.CQPN ascending
where b.ORDERID == id
select new OrderDetailsViewModel
{
tb_parts_order = e,
tb_parts_orderpart = b, //(.ToList)
tb_parts_vendor = d, //(.ToList)
tb_parts_warehouse = a, //(.ToList)
tb_parts_part = c //(.ToList)
});
return View(vm);
}
这显然不起作用,因为我无法获得这样的列表。我已经看到人们在 select new 中进行另一个查询,但我不想重复查询 5 次。实现这一目标的最佳方法是什么?
【问题讨论】:
-
您是否有理由为每个表使用模型。这将使您尝试做的事情变得更加困难。此外,最好让您的控制器保持清洁,并且应该在单独的服务类中完成查询
-
对不起,我真的不明白你的意思。我需要显示订单的详细信息,并使用包含所有相关订购零件和供应商的表格以及仓库表和零件表中的其他详细信息来显示实际订单。我需要所有这些信息,所以我想我应该获取所有数据并通过视图模型发送。我可以使用 JS 并使用 ajax 获取数据,但我又多次访问数据库。只是想提高性能。
-
这显然行不通,因为我无法获得这样的列表你能详细说明一下吗?你为什么这么认为?
-
刚刚给了你我项目的sn-p。我认为你应该追求类似的东西
-
谢谢EasyE,我只用过这个实体数据库linq查询,还没有深入sqlconnection。我想我遇到的主要问题是我有 1 个项目是单个条目,而其他 4 个项目是我的视图模型中的列表。我可以只使用将要显示的数据,而不是使用整个表格,这可能是个好主意。但是我仍然会遇到同样的问题,订单是单项,所有的部分都是一个列表。真的,我只是在问如何使用我的查询并在选择新的添加代码中允许我将这些表作为列表获取。
标签: c# mysql asp.net-mvc linq