2017-03-06 71 views
1

我有一个包含两个外部页面(@ {Html.RenderAction)的View页面。 所有3页都有一个控制器。默认情况下,我从MSSQL数据库中获取所有数据,并得到结果。现在我需要按日期筛选结果,并在一些日期之间取得结果。如何在两个日期之间进行搜索

下面是搜索表单的HTML代码:

@using (Html.BeginForm("Reporti", "Reporti", null, FormMethod.Get)) 
    { 
    <table border="0" cellspacing="5" cellpadding="5"> 
     <tbody> 
      <tr> 
       <td>Od Datum:</td> 
       <td><input type="text" id="datumOD" name="datumOD" class="datumOD"></td> 
      </tr> 
      <tr> 
       <td>Do Datum:</td> 
       <td><input type="text" id="max" name="datumDO" class="datumDO"></td> 
      </tr> 
      <tr> 
       <td></td> 
       <td><input type="submit" value="Baraj" /></td> 
      </tr> 
     </tbody> 
    </table> 
} 

页面的网址是:H **号码://本地主机:41777/Reporti/Reporti

后点击搜索按钮我有这个URL

ħ**号码://本地主机:41777/Reporti/Reporti datumOD = 2017年3月1日& datumDO = 2017年3月2日

这里是控制器的代码

public ActionResult Reporti(string filter, DateTime? datumOD, DateTime? datumDO) 
    { 
     Session["invoiceFrom"] = datumOD; 
     Session["invoiceTo"] = datumDO; 


     return View(); 
    } 
    public ActionResult reportIZ(DateTime? datumOD, DateTime? datumDO) 
    { 
     var smetkis = db.smetkis.Include(s => s.firmi); 
     return View(smetkis.ToList()); 
    } 

    public ActionResult Report(DateTime? datumOD, DateTime? datumDO) 
    { 
     var ponudis = db.ponudis.Include(s => s.ponudaDets).Where(x => x.odobreno); 
     return View(ponudis.ToList()); 
    } 

我的问题是,如何实现代码公众的ActionResult Reporti过滤日期之间的结果。如果您需要从一次你应该使用Union 2个表中获取数据

public ActionResult Reporti(DateTime? datumOD, DateTime? datumDO) 
{ 
    var ponudis = db.ponudis.Include(s => s.ponudaDets).AsQueryable(); 
    if(datumOD.HasValue) //If we have date - add condition 
     ponudis = ponudis.Where(x => x.odobreno >= datumOD); 
    if(datumDO.HasValue) //If we have date - add condition 
     ponudis = ponudis.Where(x => x.odobreno <= datumDO); 
    return View(ponudis.ToList()); 
} 

+0

胡乱猜测的基础上,稀疏的信息你给:'VAR filteredResult = db.Whatever.Where(X => X。 datumOD> = datumOD && x.datumDO <= datumDO).ToList()' –

+0

是否可以从两个表中过滤,例如。 ponudis和smetkis在一起? – Xelmep

回答

0

只需添加另一个条件。但是如果你的表格有不同的结构,你应该创建一个单独的类,如RowViewModel。像这样:

public class RowViewModel 
{ 
    public int Id {get; set;} 
    public int DateTime? Odobreno {get; set;} 
    //your other properties 
} 

然后在你的控制器:

public ActionResult Reporti(DateTime? datumOD, DateTime? datumDO) 
{ 
    var ponudis = db.ponudis.Include(s => s.ponudaDets).AsQueryable(); 
    var smetkis = db.smetkis.Include(s => s.firmi).AsQueryable(); 
    if(datumOD.HasValue) //If we have date - add condition 
    { 
     smetkis = smetkis.Where(x => x.odobreno >= datumOD); 
     ponudis = ponudis.Where(x => x.odobreno >= datumOD); 
    } 

    if(datumDO.HasValue) //If we have date - add condition 
    { 
     smetkis = smetkis.Where(x => x.odobreno >= datumOD); 
     ponudis = ponudis.Where(x => x.odobreno <= datumDO); 
    } 

    var res = smetkis.Select(x => new RowViewModel 
    { 
     Id = x.ID, 
     Odobreno = x.odobreno 
     //other properties if you need   
    }).Union(ponudis.Select(x => new RowViewModel //note Union 
    { 
     Id = x.ID, 
     Odobreno = x.odobreno 
     //other properties if you need   
    })); 
    return View(res); 
} 
+0

是的,这是正确的,但对我来说问题是,我需要在一个地方一起做到这一点为ponudis => ToList也同时从smetkis => ToList中取数据,这是可能做到的公共ActionResult报告在同一时间? – Xelmep

+0

@Xelmep检查更新 –

相关问题