我有以下问题:
业务问题:我在世界各地有超过500个ETF,分为不同类型(世界各地,资本类型(小型股/大型股)等,这些是不同的领域。一个SQL数据库。
编码问题:我能够显示整个ETF列表,对它们进行排序等等。问题在于创建5个不同的表(世界上5个区域)网页。在SQL World中,它将是一个简单的
"from=feb 1 2016"
今天我在哪里:我能够查询数据库并检索所有ETF并在页面上成功显示它们,但我无法以任何方式过滤它们。这是一张桌子的M / V / C.希望有人可以为我拼凑。
MODEL
Select * from ETF where RegionDS = 'Europe'
查看
namespace SmartAdminMvc.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public partial class ETF
{
[Key]
public string Symbol { get; set; }
[Key]
public System.DateTime TodaysDate { get; set; }
public string SubSectorDS { get; set; }
public Nullable<int> RANK { get; set; }
public string RegionDS { get; set; }
CONTROLLER:
@model IEnumerable<SmartAdminMvc.Models.ETF>
<table id="dt_basic" class="table table-striped table-bordered table-hover" width="100%">
<thead>
<tr>
<th> @Html.DisplayNameFor(model => model.RANK)</th>
<th> <a title=@Html.DisplayNameFor(model => model.Symbol)> @Html.DisplayNameFor(model => model.Symbol) </a> </th>
<th> <a title=@Html.DisplayNameFor(model => model.TodaysDate)>@Html.DisplayNameFor(model => model.TodaysDate) </a> </th>
<th> <a title=@Html.DisplayNameFor(model => model.SectorDS)>@Html.DisplayNameFor(model => model.SectorDS) </a> </th>
<th> <a title=@Html.DisplayNameFor(model => model.RegionDS)>@Html.DisplayNameFor(model => model.RegionDS) </a> </th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.OrderBy(item => item.RANK).Take(50))
{
if (item.RegionDS == "Europe")
{
<tr>
<td align="right"> @Html.DisplayFor(modelItem => item.RANK) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.Symbol) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.TodaysDate) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.SectorDS) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.RegionDS) </td>
</tr>
}
}
</tbody>
</table>
答案 0 :(得分:0)
目前,您从整个列表中排名前50,然后尝试按地区过滤。但是,这只会返回50条记录中的匹配项(如果有的话)。相反,首先进行过滤:
<tbody>
@foreach (var item in Model.Where(w => w.RegionDS == "Europe").OrderBy(item => item.RANK).Take(50))
{
<tr>
<td align="right"> @Html.DisplayFor(modelItem => item.RANK) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.Symbol) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.TodaysDate) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.SectorDS) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.RegionDS) </td>
</tr>
}
</tbody>
修改强>
如果您只显示记录的子集,则可以创建一个ViewModel,如下所示:
public class MyViewModel
{
public IEnumerable<ETF> EuropeETFs {get; set;}
public IEnumerable<ETF> AsiaETFs {get; set;}
...
}
然后在你的控制器中:
MyViewModel vm = new MyViewModel();
vm.EuropeETFs = db.ETFs.Where(w => w.RegionDS == "Europe").OrderBy(item => item.RANK).Take(10);
....
将View的模型类型更改为MyViewModel,然后:
<tbody>
@foreach (var item in Model.EuropeETFs)
{
<tr>
<td align="right"> @Html.DisplayFor(modelItem => item.RANK) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.Symbol) </td>
<td align="right"> @Html.DisplayFor(modelItem => item.TodaysDate) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.SectorDS) </td>
<td align="center"> @Html.DisplayFor(modelItem => item.RegionDS) </td>
</tr>
}
</tbody>