ASP.Net TO SQL查询

时间:2016-12-14 14:55:23

标签: asp.net asp.net-mvc-5

我有以下问题:

业务问题:我在世界各地有超过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>

1 个答案:

答案 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>