【问题标题】:LINQ - Where Conditions - "if-else" CasesLINQ - Where 条件 - “if-else”案例
【发布时间】:2016-03-15 18:13:48
【问题描述】:

我有以下 Linq 查询。我想要的是,如果我搜索一个特定的year,我应该得到那个year 的相应记录。否则只显示当年的记录。同样的方式searchtext 也必须完成。

    public ActionResult Search(string searchtext, int? year)
    {
                string selyear = year.ToString();
                string curyear = (DateTime.Now.Year).ToString();

                hdms = from t in db.HOLIDAY                           
                       where    
                           (year == null || t.DOH.StartsWith(selyear)) &&
                           (searchtext == "" || t.HOLIDAY_NAME == searchtext)                      
                       select new HOLIDAYDETAILS
                       {
                           DOH = t.DOH,                               
                       };
                       ....
    }

我也想满足这个if (year == null) then t.DOH.StartsWith(curyear)

if (searchtext == "") then t.HOLIDAY_NAME != "Sunday" && t.HOLIDAY_NAME != "Saturday".

另外,如果两者同时为null,则应同时满足这两个条件。

我怎样才能在上面的 where 子句中也给出这个?

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    如果检查年份是否为空是您的问题,那么您只需这样做-

    public ActionResult Search(int? year)
        {
                    string selyear = year.ToString();
                    string queryyear = (string.IsNullOrEmpty(selyear)) // checking for null
                                       ? (DateTime.Now.Year).ToString() // current year
                                       : selyear; // year in query
    
                    hdms = from t in db.HOLIDAY
                           join t1 in db.EMPLOYEE on t.UPDATED_BY equals t1.EMP_CODE
                           where    
                               t.DOH.StartsWith(queryyear)  // comparing queryyear        
    
                           orderby
                               t.DOH
                           select new HOLIDAYDETAILS
                           {
                               DOH = t.DOH,                               
                           };
                           ....
        }
    

    希望这对你有用...

    【讨论】:

      【解决方案2】:
      public ActionResult Search(int? year)
      {
          string curyear = (DateTime.Now.Year).ToString();
          string selyear = year!=null? year.ToString() : curyear;
      
          var query = from t in db.HOLIDAY
                      join t1 in db.EMPLOYEE on t.UPDATED_BY equals t1.EMP_CODE
                      select new {t,t1};
      
          query = query.Where(o=>o.t.DOH.StartsWith(selyear));
      
          if (searchtext == "")
          {
              query = query.Where(o=>o.t.HOLIDAY_NAME != "Sunday" && o.t.HOLIDAY_NAME != "Saturday");
          }
      
          hdms = query.OrderBy(o=>o.t.DOH).Select(o=> new HOLIDAYDETAILS
                 {
                     DOH = o.t.DOH,                               
                 });
         ....
      }
      

      【讨论】:

      • 以上代码对我有用。你也可以给我searchtext的条件吗?
      • @LimnaD'silva 您可以根据您的条件逐步创建查询
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多