C# 如何计算乘积之和
我有一个动作ViewModel,它显示按产品名称分组的所有产品。但这并没有告诉我每个部门有多少人 假设我在It部门有20台计算机,在管理部门有10台计算机,然后我的代码显示我的产品名称,即“计算机”。 总人数为30人,但不包括it部门和管理部门的人数 服务器或其他产品也是如此 所以我正试图用这个动作来获取每个部门的产品数量。我知道alrteady部门Id和那些部门不是动态的 //这是在我的家庭控制器,这是我的行动,试图得到每个部门的总和C# 如何计算乘积之和,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个动作ViewModel,它显示按产品名称分组的所有产品。但这并没有告诉我每个部门有多少人 假设我在It部门有20台计算机,在管理部门有10台计算机,然后我的代码显示我的产品名称,即“计算机”。 总人数为30人,但不包括it部门和管理部门的人数 服务器或其他产品也是如此 所以我正试图用这个动作来获取每个部门的产品数量。我知道alrteady部门Id和那些部门不是动态的 //这是在我的家庭控制器,这是我的行动,试图得到每个部门的总和 [HttpGet] public ActionResult
[HttpGet]
public ActionResult GetStatusOfDepartments(int ProductId, int departmentId )
{
var products = context.Inventory.Where(x => x.ProductId == ProductId && x.departmentId == departmentId).FirstOrDefault();
if(products != null)
{
return Content(products.Status.ToString());
}
else
{
return Content("No products");
}
}
我想在这个ViewModel中调用“GetStatusOfDepartments”操作,但这个givs为空。你能帮我出什么事了吗
要在此ViewModel中调用操作
@model IEnumerable<ProductsInventory.Models.StatusModel>
<table class="table">
<tr>
<th>
Produkt name
</th>
<th>
It-Department
</th>
<th>
Adminstration
</th>
<th>
TotalProducts
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ProductName)
</td>
<td>
// Here I want to call like this
@Html.Action("GetStatusOfDepartments", "Home", new { ProductId = item.ProductId, departmentId = 1 })
</td>
<td>
// The same Here I want to call like this
@Html.Action("GetStatusOfDepartments", "Home", new { ProductId = item.ProductId, departmentId = 2 })
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
</tr>
}
</table>
@model IEnumerable
产品名称
It部门
管理
总产品
@foreach(模型中的var项目)
{
@Html.DisplayFor(modelItem=>item.ProductName)
//我想这样打电话给你
@Action(“GetStatusOfDepartments”,“Home”,新的{ProductId=item.ProductId,departmentId=1})
//这里也是我想这样称呼的
@Action(“GetStatusOfDepartments”,“Home”,新的{ProductId=item.ProductId,departmentId=2})
@DisplayFor(modelItem=>item.Status)
}
在@Html.Action中,第一个参数应该是Action name,第二个参数应该是controller name。您需要更改您的代码以与之匹配。到目前为止,您所做的工作中有两件事情非常突出
- 看到ActionResult返回内容()是非常罕见的。这意味着控制器正在向视图提供原始字符串,而这实际上不是控制器的重点
- 当前,该视图在循环中嵌入了
请求,这表明该视图没有提供适当的模型@Html.Action()
- 这个问题的标题表明它更多地与数据库查询有关,而不是与MVC有关
- 目前,单个页面加载将导致许多数据库查询,至少是产品类型数量的两倍。最好尽可能少地执行数据库查询,因为它们通常会对加载每个页面所需的时间产生很大影响
public class ProductsInDepartments
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public int ITTotal { get; set; }
public int AdminTotal { get; set; }
public int Status { get; set; }
}
这只是视图中每个列的一个属性。我想你只有两个部门,它们的名字没有映射到数据库中。如果这是不正确的,那么我会建议一种不同的模式和方法
控制器
控制器需要准备一个模型。在这种情况下,我们将获得所有数据,然后将其转换为我们需要的模型结构:
public enum Departments // Enumerating a database key like this can be helpful if the database itself doesn't describe the numbers in a lookup table or something
{
IT = 1,
Admin = 2
};
[HttpGet]
public ActionResult Status()
{
var Inventory = context.Inventory.ToList(); // Get all records
var ViewModel = new List<Models.ProductsInDepartments>();
foreach (int ProductId in Inventory.Select(e => e.ProductId).Distinct().ToList())
{
ViewModel.Add(new Models.ProductsInDepartments()
{
ProductId = ProductId,
ProductName = Inventory.First(e => e.ProductId == ProductId).ProductName,
AdminTotal = Inventory.Count(e => e.ProductId == ProductId && e.DepartmentId == (int)Department.Admin),
ITTotal = Inventory.Count(e => e.ProductId == ProductId && e.DepartmentId == (int)Department.IT),
Status = Inventory.First(e => e.ProductId == ProductId).Status // I'm not sure what you are trying to do with Status, so you might need to change this
});
}
return View(ViewModel);
}
public enum Departments//
{
它=1,
管理员=2
};
[HttpGet]
公共行动结果状态()
{
var Inventory=context.Inventory.ToList();//获取所有记录
var ViewModel=新列表();
foreach(Inventory.Select(e=>e.ProductId).Distinct().ToList()中的int-ProductId)
{
ViewModel.Add(newmodels.ProductsInDepartments()
{
ProductId=ProductId,
ProductName=Inventory.First(e=>e.ProductId==ProductId).ProductName,
AdminTotal=Inventory.Count(e=>e.ProductId==ProductId&&e.DepartmentId==(int)Department.Admin),
ITTotal=Inventory.Count(e=>e.ProductId==ProductId&&e.DepartmentId==(int)Department.IT),
Status=Inventory.First(e=>e.ProductId==ProductId)。Status//我不确定您试图对Status做什么,因此您可能需要更改此设置
});
}
返回视图(ViewModel);
}
查看
现在的观点非常直截了当
@model List<ProductsInventory.Models.ProductsInDepartments>
<table class="table">
<tr>
<th>Product Name</th>
<th>IT Department</th>
<th>Administration</th>
<th>Total Products</th>
</tr>
@foreach (var Item in Model)
{
<tr>
<td>@Model.ProductName</td>
<td>@Model.ITTotal.ToString()</td>
<td>@Model.AdminTotal.ToString()</td>
@if (Model.Status == 0)
{
<td>No Products</td>
}
else
{
<td>@Model.Status</td>
}
</tr>
}
</table>
@型号列表
品名
计算机中心
管理
总产品
@foreach(模型中的var项目)
{
@Model.ProductName
@Model.ITTotal.ToString()
@Model.AdminTotal.ToString()
@如果(Model.Status==0)
{
没有产品
}
其他的
{
@模型.状态
}
}
再说一次,我不确定您试图对状态做什么,但是对于字符串重写,您可以在视图中这样做,这非常好。视图应该处理表示层关注的各个方面。感谢您的回复。我确实这样做了,但问题是一样的。如果您获得ProductId,您必须运行调试和se。最好的方法是在ViewModel StatusModel中按productId分组,这是用于填充Productname和status的操作。我认为最好是更新从控制器发送到视图的ViewModel,使其包含已存在的状态。将模型发送到视图,然后执行其他工作似乎是不必要的。供应