C# 实体框架中导航属性的属性之和
我想对网页上显示的一列数据进行汇总 我试着用C# 实体框架中导航属性的属性之和,c#,asp.net-mvc,C#,Asp.net Mvc,我想对网页上显示的一列数据进行汇总 我试着用 ViewBag.Total = bookingdb.Packages.Sum(x => x.PkgBasePrice); 这让我得到了数据库中所有数据的总和 我试过了 @Model.Sum(i => i.Package.PkgBasePrice) 以及我得到一个空异常错误的地方 我通过EF连接了3张桌子、预订套餐和客户 视图表单具有父表预订,因此如果我尝试添加任何内容 比如说别的 @Model.Sum(i => i.Travel
ViewBag.Total = bookingdb.Packages.Sum(x => x.PkgBasePrice);
这让我得到了数据库中所有数据的总和
我试过了
@Model.Sum(i => i.Package.PkgBasePrice)
以及我得到一个空异常错误的地方
我通过EF连接了3张桌子、预订套餐和客户
视图表单具有父表预订,因此如果我尝试添加任何内容
比如说别的
@Model.Sum(i => i.TravelerCount)
它是有效的,问题是当它像i.table.column那样出现错误时
我想对网页上显示的所有PkgBasePrice
数据求和,因为这些数字是通过客户筛选的,并且是重复的,所以不能通过数据库求和
这是我的看法
@model IEnumerable<Online.Models.Booking>
@{
ViewBag.Title = "Bookings";
}
@*<h1>Welcome @Session["CustomerId"].ToString()</h1>*@
<h1>Welcome @Session["Username"].ToString()</h1>
<p>
<h2> Your Bookings </h2>
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.BookingDate)
</th>
<th>
@Html.DisplayNameFor(model => model.BookingNo)
</th>
<th>
@Html.DisplayNameFor(model => model.TravelerCount)
</th>
<th>
@Html.DisplayNameFor(model => model.Customer.CustFirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.Customer.CustLastName)
</th>
<th>
@Html.DisplayNameFor(model => model.Package.PkgName)
</th>
<th>
@Html.DisplayNameFor(model => model.PkgBasePrice)
</th>
<th></th>
</tr>
@foreach (var item in Model.Where(ModelItem =>
ModelItem.CustomerId.Equals(Session["CustomerId"])))
{
<tr>
@*<td>
@Html.DisplayFor(modelItem => item.Customer.CustomerId)
</td>*@
<td>
@Html.DisplayFor(modelItem => item.BookingDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.BookingNo)
</td>
<td>
@Html.DisplayFor(modelItem => item.TravelerCount)
</td>
<td>
@Html.DisplayFor(modelItem => item.Customer.CustFirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Customer.CustLastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Package.PkgName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Package.PkgBasePrice)
</td>
<td>
@Html.ActionLink("Package Details", "Details", new { id =
item.BookingId })
</td>
</tr>
}
</table>
@Model.Sum(i => i.Package.PkgBasePrice) //doesn't Work
<div> @ViewBag.Total </div>
<div>
@Html.ActionLink("Personal Information", "Customer", "Customer")
</div>
@model IEnumerable
@{
ViewBag.Title=“预订”;
}
@*欢迎@Session[“CustomerId”]。ToString()*@
欢迎@Session[“Username”]。ToString()
您的预订
@Html.DisplayNameFor(model=>model.BookingDate)
@DisplayNameFor(model=>model.BookingNo)
@DisplayNameFor(model=>model.TravelerCount)
@DisplayNameFor(model=>model.Customer.CustFirstName)
@DisplayNameFor(model=>model.Customer.CustLastName)
@DisplayNameFor(model=>model.Package.PkgName)
@DisplayNameFor(model=>model.PkgBasePrice)
@foreach(模型中的变量项,其中(模型项=>
ModelItem.CustomerId.Equals(会话[“CustomerId”]))
{
@*
@DisplayFor(modelItem=>item.Customer.CustomerId)
*@
@DisplayFor(modelItem=>item.BookingDate)
@DisplayFor(modelItem=>item.BookingNo)
@DisplayFor(modelItem=>item.TravelerCount)
@DisplayFor(modelItem=>item.Customer.CustFirstName)
@DisplayFor(modelItem=>item.Customer.CustLastName)
@DisplayFor(modeleItem=>item.Package.PkgName)
@DisplayFor(modelItem=>item.Package.PkgBasePrice)
@ActionLink(“包详细信息”,“详细信息”,新{id=
item.BookingId})
}
@Model.Sum(i=>i.Package.PkgBasePrice)//不工作
@查看包。总计
@ActionLink(“个人信息”、“客户”、“客户”)
我想问的第一个问题是“您从哪里获取数据?您是否直接在视图中访问实体?”
如果是这样,我强烈反对这样做。您最好使用视图模型并在业务层中填充该视图模型。视图应该只绑定到视图模型并显示其值;你不应该以这种方式把逻辑混为一谈
第二个问题是“您是否正在添加附加导航属性的包含项”?空值有时可能是由于导航属性未包含在基础查询中造成的
从根本上说,我认为这里没有足够的信息来提供充分的帮助。我想问的第一个问题是“您从哪里获取数据?您是否直接在视图中访问实体?” 如果是这样,我强烈反对这样做。您最好使用视图模型并在业务层中填充该视图模型。视图应该只绑定到视图模型并显示其值;你不应该以这种方式把逻辑混为一谈 第二个问题是“您是否正在添加附加导航属性的包含项”?空值有时可能是由于导航属性未包含在基础查询中造成的
从根本上说,我认为这里没有足够的信息来完全帮助您问题在于,当您在控制器方法中加载
预订列表
时,它没有为每个预订加载相关的包
。要为预订列表中的每个预订加载相关的套餐
,您可以使用Incldue
,如下所示:
var bookingList = bookingdb.Bookings.Include(b= > b.Package).ToList();
return View(bookingList);
此外,为了确保预订
必须包含套餐
,请按以下方式编写查询。否则,如果任何预订
不包含包
它将在总和
期间引发空引用异常
@Model.Where(b => b.Package != null).Sum(i => i.Package.PkgBasePrice)
希望它现在能为您工作。问题是当您在控制器方法中加载预订列表时,它没有为每个预订加载相关的包。要为预订列表中的每个预订加载相关的套餐
,您可以使用Incldue
,如下所示:
var bookingList = bookingdb.Bookings.Include(b= > b.Package).ToList();
return View(bookingList);
此外,为了确保预订
必须包含套餐
,请按以下方式编写查询。否则,如果任何预订
不包含包
它将在总和
期间引发空引用异常
@Model.Where(b => b.Package != null).Sum(i => i.Package.PkgBasePrice)
希望它现在能对您起作用。谢谢Robert,我是mvc新手,我正在尝试创建视图模型方法,正如您所说,我从实体中提取数据。如果我的答案有用,请您投票给我好吗:-)我在这里太新了,所以我的投票没有什么不同:(对不起,罗伯特,我是mvc新手,我正在尝试创建视图模型方法,正如你所说的,我从实体中提取数据。如果我的答案有用,你能投票给我吗:-)我在这里太新了,所以我的投票没有什么不同:(对不起